Reflection学习笔记一

本文深入讲解Java反射机制的基础知识,包括获取Class实例的三种方法、如何利用反射创建对象实例、获取对象方法及属性的方式,并对比了不同方法的区别。

 昨晚学了reflection,感觉很XXX,这是基础,已前自己却从未了解过,内牛满面啊

 

 1 用反射必须用CLass类

 

  每一个对象都会对应一个唯一的class  ,有三种方式可以得到某一个对象的Class,已String对象为例。

        1>、 Class<?>  cl1= java.lang.String.class;

        2>、 CLass<?>  cl2= java.lang.String.getClass();

        3>、 CLass<?>  cl3= Class.forName("java.lang.String");

        其中,AA.class  和AA.getCLass();是不一样的,如果AA是最终的对象,则一样,如果AA比如是Object ,而AA其实是User类
        那么AA.class就是得到object的Class,而AA.getClass得到的是User的实例。

 2 通过Class可以构造出某一个类的实例对象,前提是该class所对应的对象必须有public的构造方法,最好是无参的。

       1> String  str=c(1,2,3).newInstance();      // 调用的是public的 无参的   等价于 String s=new String();

       2> String  str=c(1,2,3).getConstruction(new Class[]{String.class}).new Instance(new Object[]{"hello"}); 
             // 有参的构造方法, 等价于 String s=new String("hello");


 3 得到某一个对象的某一个方法或全部方法
         注意:每一个对象的每一个方法都对应一个Method对象

          Methods ms=c(1,2,3).getDeclaredMethods();  //得到某一个类所有方法的数组

             Method method = c(1,2,3).getMethod("substring",new Class[]{int.class,int.class});  

        //得到某一个方法 需要传递方法名,第二个参数为该方法的输入参数数 组列

 

4 得到某一个对象的属性,也称公共成员变量
  
         注意:每一个对象的每一个属性都对应一个Field对象
           Field[] fields=c(1,2,3).getDeclaredFields();   // 得到某一个类所有的属性

           Field f      = c(1,2,3).getField(“aa”);  //得到某一个类的已aa命名的属性

 5 方法的调用,这个是重点。

          调用String的substring方法
 
            Object obj =method.invoke(str,new Object[]{1,5});    //等价于  Object obj=(Object)str.substring(1,5);

 

6 Class类中getMethods()与getDeclaredMethods()的区别

     getMethods()得到public属性的方法
     getDeclaredMethods()得到的是所有的privete、public等全部的方法

   注 getFields和getDeclaredFields方法的区别和上面的一样

 

今天暂且到这里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值