反射:可以动态的获取指定类中的成员,以及建立指定类对象。
以前操作对象的时候,用的是new关键字完成,并通过对象,对其成员进行调用。
Person p=new Person();1,先加载Person.class文件,2,对对象进行初始化
p.function():3,调用其方法。
在对象调用成员方法时:需要明确两个因素:1,对象2,参数列表。
通过字节码操作完成以上动作:
1, 加载Person.class文件,获取Person.class文件对应的class对象。
Class clazz=Class.forName(“Person”);
2. 通过字节码文件对象,对指定类进行对象创建,并初始化。
Person p=(Person)class.newInstance();其实是通过空构造函数进行初始化的。
3.通过对象调用成员
p.function()//其实这个方法可以事先不知道
类可以作为参数进行传递,那么方法也可以一样作为参数进行传递,因为方法存在于字节码文件内,所以可以通过Class对象获取字节码文件中的内容,动态的获取方法。
Method m=clazz.getMethod(“方法名”,参数列表类型(Class));
m.invoke(对象,参数);
类或方法都作为参数进行传递,这样到底对于开发有哪些好处呢?
需求:设计主机,为了提高后期的扩展性,也就是说为了后期提高电脑的功能,对外提供了PCI接口,以方便电脑功能的扩展。
后期:想要进行电脑扩展,想要加入一个网卡,只需要定义一个网卡,实现PCI接口,只要覆盖这个规则,主板可以使用该板卡。 |