Java反射

1、Class类的使用

      1)在面向对象世界中,万事万物都是对象。每一个类也是对象,类是java.lang.Class类的实例对象。There is a class named Class.

            任何一个类都是Class的实例对象,这个实例对象有三种表示方式。

            第一种方法实际告诉我们任何一个类都有一个隐含的静态成员变量class;

            Class c1 = 某类.class;

             第二种方法通过getClass方法;

             Class c2 = 某类实例对象.getClass();

             Class c3 = Class.forName("com.imooc.reflect.Foo");//返回的是加载类的类类型即Foo类的类类型

             反射可以绕过编译,在运行时操作

2、方法的反射

             Method类,方法对象
             一个成员方法就是一个Method对象
            getMethods()方法获取的是所有的public的函数,包括父类继承而来的
            getDeclaredMethods()获取的是所有该类自己声明的方法,不问访问权限

 

           public static void printClassMessage(Object obj){

                     Class c=obj.getClass();

                     Method[] ms=c.getMethods();getmethods获取所有的public的函数,包括父类继承而来的。

                    获取某一个,c.getMethod("name",参数类型1.class,参数类型2.class)

                     c.getDeclaredMethods()获取所有该类自己声明的方法,不问访问权限

                     for(int i=0;i<ms.length;i++){

                              Class a=ms[i].getReturnType();得到方法的返回值类型的类类型

                              String b=ms[i].getName();得到方法的名称

                              Class[] c=ms[i].getParameterTypes();获取参数类型。得到的是参数列表的类型的类类型

                              for(Class d:c){

                                      String a=d.getName()

                              }

                       }

             方法的反射操作:

             1)如何获取某个方法

                   方法的名称和方法的参数列表唯一决定某一个方法

              2)方法反射的操作(用Method的实例对象来进行调用)

                    method.invoke(对象,参数列表)

                    一般:a1.print(10,20);

                    现在:m.invoke(a1,new Object[]{10,20});(方法没有返回值返回null,有返回值返回具体的值但需要强制转换)

              3)获取方法:获取一个方法就是获取类的信息,获取类的信息首先获取类类型。

 

3、成员变量的反射

             Field[] fs=c.getFields()获取所有的public 的成员变量的信息

             Field[] fs=c.getDeclaredFields()获取该类自己声明的成员变量的信息

             for(Field a:fs){

                     Class b=a.getType();得到成员变量的类型的类类型

             }     

4、构造函数的反射

             构造函数也是对象java.lang.constructor封装了构造函数的信息

             getConstructor获取所有的public的构造函数

             constructor[] a=c.getConstructor();

             constructor[] a=c.getDeclaredConstructor();

             for(constructor b:a){

                         Class[]  c=b.getParameterTypes();获取构造函数的参数列表,得到参数列表的类类型

              }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值