反射:
可以动态的获取指定类中的成员,以及建立类对象。
好处:提高了程序的扩展性。
张三,李四等这些生活中的对象,可以通过Person类的形式对其进行描述。
当class文件产生以后,这些class文件也是生活中的事物,那么对这些class文件也可以进行描述,该描述对应的类型就是Class。
在java中,每一个字节码文件都有一一个与之对应的Class对象。不仅包括引用数据类型,也包括基本数据类型。int.Class
- String.class----Class
- Class class1=String.class;
- String s="abc";
- Class class2=s.getClass();
- Class class3 = Class.forName("java.lang.String");
|
以上就是获取字节码文件的三种方式。
以前操作对象的时候用的是new关键字完成,并通过对象。成员方式进行调用
- Person p= new Person();
-
-
- p.function("heihei");
-
- 1.对象 2.获取参数列表
|
现在可以通过字节码对象完成以上动作。
-
- Class clazz = Class.forName("Person");
-
- Person p=(Person)clazz.newInstance();
-
-
|
类可以作为参数进行传递,那么方法也一样可以作为参数进行传递,因为方法存在于字节码文件内, 所以可以通过Class对象获取字节码文件中的内容。
- Method m = Class.getMethod("function",String.class);
- m.invoke(p,"heihei");
|
类或者方法都作为参数传递这样对于开发到底有那些好处呢?
需求:设计一个主板,为了提高后期的扩展性,也就是为了后期提高电脑的额功能,对外提供了PCI的接口。以方便电脑功能的扩展。
- interface PCI{
- void open();
- void close();
- }
- class MainBoard{
- public void usePCI(PCI p){
- p.open();
- p.close();
- }
- }
- class MainBoardDemo{
- public static void main(String[] args){
- MainBoard mb=new MainBoard();
-
- mb.usePCI(NetCard);
- }
- }
|