您的位置:首页 > 职场人生

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

2013-12-23 01:27 351 查看
------- 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培训、期待与您交流! ----------------------


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: