zoukankan      html  css  js  c++  java
  • java的反射

    能够分析类能力的程序称为反射,我们为了在程序运行过程中能够动态的去获得对象域,对象的方法,提出了反射的概念

    一个Class 对象将表示一个特定类的属性,获取这个属性有三种方法

    (1)通过对象.GetClass可以获取这个属性

    (2)或者通过类的名字.class也可以获得这个属性(类要是在包里包的名字也是类名字的一部分)

    (3)Class.forName (className ) 通过类名的字符串来获取

    Class的对象的方法 newlnstance ( ), 可以用来动态地创建一个类的实例,比如e.getClass().newlnstance()就是创建一个和e相同类型的对象

    可以通过下面这个方式来对数组进行扩容

        public static Object goodCopyOf ( Object a , int newLength )
        {
            Class cl = a . getClass();//先获取对象的类型
            if (!cl.isArray()) return null ;//如果不是数组,直接退出
            Class componentType = cl.getComponentType();//获取数组中元素的类型
            int length = Array. getLength(a);//得到数组原来的长度
            Object newArray = Array.newInstance (componentType,newLength);//根据元数类型和数组新长度创建数组
            System . arraycopy (a,0,newArray,0,Math.min(length,newLength));//拷贝
            return newArray ;
        }
    }

    1.通过反射来获取对象中的域值

    AA a = new AA();
    Class cl = AA.getClass();//获取这个类的Class对象
    Filed f = cl.getDeclaredField("name");//获取对象域中叫name的
    Object v = f.get (a) ;//通过get方法传入实际的对象,得到a.name的值

    2.通过反射来调用对象中的方法(类似于函数指针)

    AA tt = new AA();
    Class aa = AA.class;
    int w = 12;
    //其中getMethod中填方法的名字以及对应需要什么类型的参数
    //invoke中填具体那个对象的方法,以及实际传入的参数        aa.getMethod("Myprint",int.class,String.class).invoke(tt,w,"biubiu");
    
    //调用的函数为
        public void Myprint (int aa,String str)
        {
            System.out.println(aa);
            System.out.println(str);
        }

     注:不要过多的使用反射,编译器很难帮助人们发现程序中的错误 , 因此只有在运行时才发现错误并导致异常

  • 相关阅读:
    Html.Partial和Html.RenderPartial, Html.Action和Html.RenderAction的区别
    cygwin下git出现cabundle.crt相关错误的解决办法
    Orchard CMS前台页面为什么没有Edit链接?
    Entity Framework练习题
    分析Autofac如何实现Controller的Ioc(Inversion of Control)
    在Winform,Silvelight,WPF等程序中访问Asp.net MVC web api
    适合.net程序员的.gitignore文件
    如何处理Entity Framework中的DbUpdateConcurrencyException异常
    Asp.net MVC中repository和service的区别
    smplayer中使用srt字幕乱码问题
  • 原文地址:https://www.cnblogs.com/TheQi/p/10443013.html
Copyright © 2011-2022 走看看