学习连接:https://www.bilibili.com/video/BV18J411W7cE?p=395 中P395-P407
文章目录
1. 类加载与类加载器
1.1 类加载
1.2 类加载器
2. 反射
2.1 反射概述
Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。
2.2 获取Class类的对象
2.3 反射获取构造方法并使用
2.4 反射获取成员变量并使用
2.5 反射获取成员方法并使用
2.6 反射练习之越过泛型检查
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
/**
* 练习1:我有一个ArrayList<Integer>集合,现在我想在这个集合中添加一个字符串数据,如何实现?
*/
public class Demo1 {
public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
//创建集合
ArrayList<Integer> arr = new ArrayList<Integer>();
// arr.add(10);
// arr.add(20);
// System.out.println(arr);
Class<? extends ArrayList> c = arr.getClass();
Method m = c.getMethod("add", Object.class);
m.invoke(arr,"hello");
m.invoke(arr,"world");
m.invoke(arr,"java");
System.out.println(arr);
}
}
2.7 反射练习之运行配置文件制定内容
2.7.1 Test类
public class Test {
public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Properties pros = new Properties();
FileReader fr = new FileReader("class.txt");
pros.load(fr);
fr.close();
String className = pros.getProperty("className");
String methodName = pros.getProperty("methodName");
Class c = Class.forName(className);
Constructor con = c.getConstructor();
Object obj = con.newInstance();
Method m = c.getMethod(methodName);
m.invoke(obj);
}
}
2.7.2 Student类
public class Student {
public void study(){
System.out.println("学生学习");
}
}
2.7.3 class.txt
className=myReflect.demo2.Student
methodName=study