一、反射机制概念
(1)反射机制有什么用?
通过java语言中的反射机制可以操作字节码文件。
通过反射机制可以操作代码片段。(class文件。)
(2)反射机制的相关类在哪个包下?
java.lang.reflect.*;
(3)反射机制相关的重要的类有哪些?
java.lang.Class:代表整个字节码,代表一个类型,代表整个类
java.lang.reflect.Method:代表字节码中的方法字节码。代表类中的方法
java.lang.reflect.Constructor:代表字节码中的构造方法字节码。代表类中的构造方法
java.lang.reflect.Field:代表字节码中的属性字节码。代表类中的成员变量
二、反射机制语法
(1)在java中获取Class的三种方式?
第一种:
Class c = Class.forName("完整类名");
第二种:
Class c = 对象.getClass();
第三种:
Class c = int.class;
Class c = String.class;
(2)获取了Class之后,可以调用无参数构造方法来实例化对象
//c代表的就是日期Date类型
Class c = Class.forName("java.util.Date");
//实例化一个Date日期类型的对象
Object obj = c.newInstance();
一定要注意:
newInstance()底层调用的是该类型的无参数构造方法。
如果没有这个无参数构造方法会出现"实例化"异常。
联想:如果只是想让一个类的静态代码块执行的话可以怎么做?
可以调用Class.forName();,因为这个方法可以导致类加载。
三、关于路劲问题
(1)通过相对路径找绝对路径
String path = Thread.currentThread().getContextClassLoader()
.getResource("相对路径").getPath();
这种方式是为了获取一个文件的绝对路径。(通用方式,不会受到环境移植的影响。)
但是该文件要求放在类路径下,换句话说:也就是放到src下面。
src下是类的根路径。
直接以流的形式返回:(也是需要放到类路径中)
InputStream in = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("相对路径");
(2)IO + Properties,怎么快速绑定属性资源文件?
ResourceBundle bundle = ResourceBundle.getBundle("相对路径文件");
String value = bundle.getString(key);
要求:这个文件必须在类路径下
这个文件必须是以.properties结尾。
不可以使用文件后缀
四、反射机制需要掌握什么?
1、通过反射机制访问对象的某个属性。
2、通过反射机制调用对象的某个方法。
3、通过反射机制调用某个构造方法实例化对象。
4、通过反射机制获取父类以及父类型接口。
自用小总结、方便复习。