Java反射基础笔记

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 类型的成员(包括属性和方法)
③. 反射和泛型. 
④. 如何获取类的注解. 
//......

 

posted @ 2017-03-18 14:05  fengze  阅读(108)  评论(0编辑  收藏  举报