反射的概述
1.本章的主要内容
①、理解Class类并获取Class实例
②、创建运行时类的对象
③、调用运行时类的指定结构
2.关于反射的理解
框架 = 反射 + 注解 + 设计模式。
3.体会反射机制的“动态性”
是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以 被引进,已有的函数可以被删除或是其他结构上的变化。通俗点说就是在运行时代码可以根据某些条件改变自身结构。
举例:
public Object getInstance(String classPath) throws Exception {
Class clazz = Class.forName(classPath);
return clazz.newInstance();
}
public void test2(){
for (int i = 0; i < 50; i++) {
int num = new Random().nextInt(3);//0 1 2
String pathName = "";
switch(num){
case 0:
pathName = "java.util.Date";
break;
case 1:
pathName = "java.lang.Object";
break;
case 2:
pathName = "loey.java.Person";
break;
}
try {
Object obj = getInstance(pathName);
System.out.println(obj);
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.反射机制能提供的功能
- 在运行时判断任意一个对象所属的类
- 在运行时构造任意一个类的对象
- 在运行时判断任意一个类所具有的成员变量和方法
- 在运行时获取泛型信息
- 在运行时调用任意一个对象的成员变量和方法
- 在运行时处理注解
- 生成动态代理
5.相关API
- java.lang.Class:代表一个类
- java.lang.reflect.Method:代表类的方法
- java.lang.reflect.Field:代表类的成员变量
- java.lang.reflect.Constructor:代表类的构造器
… …
ClassLoader
1.类的加载过程----了解
2.类的加载器的作用
3.类的加载器的分类
4.Java类编译、运行的执行的流程
5.使用Classloader加载src目录下的配置文件
Properties pros = new Properties();
//此时的文件默认在当前的module下。
//读取配置文件的方式一:
// FileInputStream fis = new FileInputStream("jdbc.properties");
// FileInputStream fis = new FileInputStream("src\\jdbc1.properties");
// pros.load(fis);
//读取配置文件的方式二:使用ClassLoader
//配置文件默认识别为:当前module的src下
// 关于类加载器的一个主要方法:getResourceAsStream(String str):获取类路 径下的指定文件的输入流
ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
InputStream is = classLoader.getResourceAsStream("jdbc.properties");
pros.load(is);
String user = pros.getProperty("user");
String password = pros.getProperty("password");
System.out.println("user = " + user + ",password = " + password);