首页 > 代码库 > 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反射
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。