标签:style blog http color ar java for sp div
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
已知HelloWorld类
1 package cn.test.HelloWorld; 2 3 public class HelloWorld { 4 public HelloWorld() 5 {} 6 public HelloWorld(String s,Integer i) 7 { 8 System.out.println("构造函数(有参数)"+s+i); 9 } 10 11 private HelloWorld(String s) 12 { 13 System.out.println("私有构造函数(有参数)"+s); 14 } 15 16 public String name="Jack"; 17 private Integer age=23; 18 19 public void print() 20 { 21 System.out.println("*******输出函数"); 22 } 23 public void print(String s,Integer i) 24 { 25 System.out.println("******输出函数(有参数)"+s+i); 26 } 27 28 private void print(String s) 29 { 30 System.out.println("*****私有输出函数(有参数)"+s); 31 } 32 33 }
1、反射获得class
有三种方法获得字节码:
//获得字节码 //1、最常用 Class clazz=Class.forName("cn.test.HelloWorld.HelloWorld"); System.out.println(clazz); //2、已知类 Class clazz2=HelloWorld.class; System.out.println(clazz2); //3、已知对象 HelloWorld helloWorld=new HelloWorld(); Class clazz3=helloWorld.getClass(); System.out.println(clazz3);
2、反射获得构造函数
1 //获得默认构造 2 Constructor constructor=clazz.getConstructor(); 3 //执行 4 Object object= constructor.newInstance(); 5 6 //获得有参数的构造函数 7 constructor=clazz.getConstructor(String.class,Integer.class); 8 //执行 9 constructor.newInstance("abcd",1234);
3、反射获得字段
1 //快捷方式:获得默认构造函数 2 Object obj=clazz.newInstance(); 3 //获得字段 4 Field field=clazz.getField("name"); 5 //关联 6 Object value = field.get(obj); 7 //输出 8 System.out.println(value); 9 10 //设置值name 11 field.set(obj, "jack2"); 12 value=field.get(obj); 13 System.out.println(value); 14 15 //获得私有字段 16 field=clazz.getDeclaredField("age"); 17 field.setAccessible(true); 18 value=field.get(obj); 19 System.out.println(value); 20 21 //设置age 22 field.set(obj, 25); 23 value=field.get(obj); 24 System.out.println(value);
4、反射获得函数
1 //实例化 2 Object obj1=clazz.newInstance(); 3 //获取函数 4 Method method=clazz.getMethod("print"); 5 //执行 6 method.invoke(obj1); 7 8 //获取有参函数 9 method=clazz.getMethod("print", String.class,Integer.class); 10 //执行 11 method.invoke(obj1, "dsf",123456); 12 13 //获取私有函数 14 method=clazz.getDeclaredMethod("print",String.class); 15 method.setAccessible(true); 16 method.invoke(obj1, "qwertyui");
标签:style blog http color ar java for sp div
原文地址:http://www.cnblogs.com/liuwt365/p/4079431.html