黑马程序员_java中的反射机制

------- android培训java培训、期待与您交流! ----------

java中的反射机制是指运行状态中

对于任意一个类,都能够知道这个类的所有属性和方法;

对于任意一个对象,都能够调用它的任意一个方法和属性;

程序的运行也就是吧源程序编译成.class文件再运行 

这个得运行状态就是指在java执行.class 文件 

然后 能通过.class文件查询到源代码的信息(类 成员变量以及方法 等)

 而要获取这写信息的第一步就是要 获取字节码文件 

前提是给了个Student.class 文件

     Class  c = Class.getClass(".class文件的路径.Student"); 

   在反射中之前的成员 构造方法 成员变量 成员方法 都封装成了类

所以需要先获取这些类 再通过类的方法去实现操作

获取构造方法  

            getConstructors()                     获取构造方法 指能获取公共的  

            getDeclaredConstructors()    获取构造方法 私有的也可以获取

获取构造方式:

                      Constructor   constructor =  c.getConstructor();

通过无参构造方法创建对象: 

                      Object obj = constructor.newInstance();

获取属性:  

         Field  f = c.getField("属性名");

   如果是私有的:

       Field f = c.getDeclaredField("属性名");

    需要多一步暴力解锁: 

           f.setAccessible(true);

用反射可以获取到任意给出的.class 文件里面的任意的类

应用举例: 

   ArrayList <Integer> 的一个对象,我想在这个集合中添加一个字符串数据,如何实现呢?
            public class ArrayListDemo {
public static void main(String[] args) throws Exception {
ArrayList<Integer> arrayList = new ArrayList<Integer>();//给出的集合
 Class  s= arrayList.getClass();//获取集合的字节码文件
 Method  m=  s.getMethod("add", Object.class);//对add 方法进行处理
           m.invoke(arrayList,"hello");//处理后的方法进行添加
  System.out.println(arrayList);
}
   }


---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------


 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值