标签:
1.Java反射机制的网络解析
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
2.实际应用
很多时候,我们实例化了一个类之后,想更改它的属性,可程序员很多时候都把一些属性给私有化了,包括一些方法,这个时候,我们就可以使用Java的反射机制去把这个实例里面的属性值进行更改,或者调用这些被私有化的方法
3.例子
//先写一个类 public class Father { private String name; public Father(){ setName("Peter"); } private void setName(String name) { this.name = name; } public String getName(){ return name; } }
//一个测试类-没有使用反射机制 public class Child { public static void main(String[] args) { try{ Father father=new Father(); System.out.println(father.getName()); //结果是Peter }catch(Exception ex){ ex.printStackTrace(); } } }
//测试类,使用了反射机制修改变量 public class Child { public static void main(String[] args) { try{ Father father=new Father(); Class<Father> fatherClass=Father.class; //访问私有变量 name Field field=fatherClass.getDeclaredField("name"); //设置为修改 field.setAccessible(true); //有两个参数(需要更改变量的实例,变量的值); field.set(father, "John"); System.out.println(father.getName());//输出John }catch(Exception ex){ ex.printStackTrace(); } } }
//调用方法 public class Child { public static void main(String[] args) { try{ Father father=new Father(); Class<Father> fatherClass=Father.class; Method method = fatherClass.getDeclaredMethod("setName", String.class); method.setAccessible(true); method.invoke(father, "Rose"); System.out.println(father.getName());//输出John }catch(Exception ex){ ex.printStackTrace(); } } }
这里要注意的是getDeclareMethod()方法与getMethod()方法
getDeclareMethod()获取自身所有的方法,包括public,private,protected
getMethod()获取包括父类的所有public方法
标签:
原文地址:http://www.cnblogs.com/oscar1987121/p/5213708.html