Android基础知识

Java中的反射

2019-08-05  本文已影响83人  iDevOps
什么是反射?
常见的应用场景
通过反射获取Class对象的三种方式
Class1 = Class.forName("com.test.domain.Person");
1. 将字节码文件加载进内存,返回Class对象
2. 多用于配置文件,将类名定义在配置文件中, 读取文件,加载类
Class2 = Person.class;
1. 通过类名的属性class获取
2. 多用于参数的传递
Person p = new Person();
Class3 = p.getClass();
1. 通过对象方法获取
2. 多用于对象的获取字节码的方式
通过反射创建对象
Class<?> aClass = Class.forName("domain.Person");
// 创建Class对象所表示对象的一个新实例,调用了Person的无参构造方法
Object o = aClass.newInstance();
System.out.println(o.toString()); //Person{name='null', age=0}
// 实例化有参构造函数
Class<?> aClass = Class.forName("domain.Person");
Constructor<?> constructor = aClass.getConstructor(String.class, Integer.class);
Person p  = (Person) constructor.newInstance("sn", 11);
System.out.println(p.toString());//Person{name='sn', age=11}
常见Api
方法名称 作用
getDeclaredMethods 获取该类的所有方法
getReturnType() 获取该类的返回值
getParameterTypes() 获取传入参数
getDeclaredFields() 获取该类的所有字段
setAccessible 允许访问私有成员

小补充: 如何禁止使用反射机机制创建对象
答: 将构造函数私有化

上一篇下一篇

猜你喜欢

热点阅读