什么是反射Reflection:
Java反射说的是在运行状态中,对于任何一个类,我们都能够知道这个类有哪些方法和属性。对于任何一个对象,我们都能够对它的方法和属性进行调用。我们把这种动态获取对象信息和调用对象方法的功能称之为反射机制。
所谓反射其实就是获取类的字节码文件,也就是.class文件,我们可以通过Class这个对象进行获取。
三种方式获取class对象的方式:
- 对象.getclass()
Iphone iph = new Iphone(); Class cls = iphone.getClass();
2. 类.Class()
Class cls = Iphone.class;
3. Class.forName(“包名.类名”)
Class cls = Class.forName(“com.lalala.Iphone”);
在以上的三种方法中:
方法1,已经创建了Iphone对象,这个时候就不需要去进行反射了,显得有点多此一举;
方法2,需要导入Iphone类的包,依赖性太强了;
方法3中的Class类继承自Object类,故可以直接使用,且实参为字符串,即使com.lalala包中的Iphone类不存在,该方法在不运行时也不会报错,所以我们一般选用方法三!
通过class对象动态创建目标对象:
Iphone iph2 = (Iphone)clz.newInstance();//java9之前的方法,不安全 Iphone iph3 = (Iphone)clz.getConstructor().newInstance(若构造器有参数,该处要填参数);//Java9推荐该方法
此外还可以通过class对象查看目标类有哪些方法和属性。