首页 > 代码库 > Java反射

Java反射

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 =http://www.mamicode.com/ field.get(obj); 7         //输出 8         System.out.println(value); 9          10         //设置值name11         field.set(obj, "jack2");12         value=http://www.mamicode.com/field.get(obj);13         System.out.println(value);14          15         //获得私有字段16         field=clazz.getDeclaredField("age");17         field.setAccessible(true);18         value=http://www.mamicode.com/field.get(obj);19         System.out.println(value);20          21         //设置age22         field.set(obj, 25);23         value=http://www.mamicode.com/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");

Java反射