1. why: 反射是学习 Java 框架的基础. Java 框架的底层实现都是基于反射.
2. Class:
1). Class 是一个类型.
2). 当一个 .class 文件被加载到 JVM 时, 在 JVM 内部会创建唯一的一个 Class 对象, 它对应 .class 文件,也就是说.class文件对应对象的class属性指向这个Class的对象。
3). 如何得到 Class 对象
//1.1 最常用的方式: 可以利用 Class 类的静态方法: forName(className)
String className = "com.atguigu.reflection.Person";
clazz = Class.forName(className);
//1.2 如果已经存在对应的对象, 则可以调用其 getClass() 方法
Object object = new Person();
clazz = object.getClass();
//1.3 也可以直接利用 类 的 class 静态属性: 该种方式不会是静态代码块执行.
clazz = Person.class;
4). Class 对象由神马作用: Class 是反射的核心, 一切反射都是从 Class 开始的.
①. 如何获取全部的方法: 调用了 Class 对象的 getMethods() 返回 Method 的数组.
//获取全部的 public 方法. 如果需要获取 private 方法, 则需调用 clazz.getDeclaredMethods()
Method [] methods = clazz.getMethods();
for(Method method: methods){
System.out.println("-->" + method.getName());
}
②. 如何获取指定 public 方法:
//注意: 需要备齐
//1). Class 对象
//2). 方法名: setName
//3). 参数类型的列表: String.class
Method method = clazz.getMethod("setName", String.class);
System.out.println("**" + method);
③. 创建 Class 对应的对象:
//2.1 创建 Class 对象所对应的那个类的对象: 调用 Class 对象的 newInstance() 方法
//注意: 必须要在 Class 对象所对应的那个类中提供一个公有的, 无参的构造器! 否则运行就会出错!
Object object = clazz.newInstance();
5). 如何使 Method 对应的方法执行.
①. Method: 在反射中对应方法.
②. 执行方法: 调用 Method 对象的 invoke 方法.
//注意: 需要备齐
//1). Method 对象. method
//2). Method 所在的那个类的对象. object
//3). 指向方法需要传入的参数. atguigu
method.invoke(object, "atguigu");
6). 后面的内容:
①. 操作属性. Field
②. 如何操作 private 类型的成员(包括属性和方法)
③. 反射和泛型.
④. 如何获取类的注解.
//......