反射
反射机制的概念
- 通过反射机制,程序员可以知道任意类中的所有属性和方法(哪怕是私有的),对于任意对象可以调用任意属性和方法。
为什么使用反射机制
扩展未知的应用。
如在框架中使用配置文件
如何使用反射机制
- 通过类的全名获取
- Class bookClass=Class.forName(“com.Book”);
- 通过类获取
- Class bookClass=Book.class;
- 通过对象获取
- Book book=new Book(“think in java”,book);
- Class bookClass=book.getClass();
- 使用方法对象
- MEthod m=bookClass.getDeclaredMethod(“方法名”,“参数的类对象”);
- m.invoke(“对象名”,“实参”);
- 调用构造对象
- Constructor c=bookClass.getDeclaredConstructor(“参数列表的类对象”);
- Book book=c.newInstance(“实参”);
- 使用字段对象
- Field field=bookClass.getDeclaredField(“属性名”);
- 修改字段值:field.set(“对象名”,值);
- 得到字段值:field.get(“对象名”);
笔记注释
这篇笔记作于学习反射期间,为了防止自己在一段时间不碰反射后,导致看不懂该笔记,特意做一个注释。
首先,要知道反射的原理。一个Java程序的执行流程大致是这样的:编写源码(.java文件),编译成可执行文件(.java->.class->二进制文件),执行。.java文件我们都知道,因为我们写的第一个程序“hello world”其后缀就是.java。那么什么是.class文件呢?
我的理解是这样的:JVM第一次加载一个类时,会创建一个class实例,这个实例记录了这个类的所有信息,包括类名、包名、父类、实现的接口、所有方法、字段等。而反射就是通过获取这个实例对象,从而获取这个类的所有信息。而一些常用方法就是上面笔记的内容了。