在Java中,Class类与java.lang.reflect类库一起对反射技术进行了全力的支持。在反射包中,我们常用的类主要有Constructor类表示的是Class 对象所表示的类的构造方法,利用它可以在运行时动态创建对象、Field表示Class对象所表示的类的成员变量,通过它可以在运行时动态修改成员变量的属性值(包含private)、Method表示Class对象所表示的类的成员方法,通过它可以动态调用对象的方法(包含private),下面将对这几个重要类进行分别说明
- 获取class文件对象的方式(重点)
class文件对象是由类加载器创建的,我们可以获取class文件对象使用
我们会使用3种方式来获取,获取的都是同一个class文件对象
1.使用Object类中的方法getClass
Class> getClass() 返回此 Object 的运行时类。
2.java会为每种数据类型都赋予一个class属性,这个属性返回的就是class文件对象
基本数据类型:4类8种 int.class,double.class,char.class,boolean.class
引用数据类型:String类型,数组,集合,自定义类(Person,Student),java提供的类,接口,枚举,注解
3.使用Class类中的静态方法forName获取
static Class> forName(String className) 返回与带有给定字符串名的类或接口相关联的 Class 对象。
参数:
String className:全类名(包名+类名)
com.itheima.demo01init.Person
com.itheima.demo02class.Person
简而言之就是
1.可以使用Object类中的方法getClass()来获取
2.可以使用类名.class属性的方式获取
3.可以使用Class类中的静态方法forName()来获取
- 通过反射技术获取构造方法对象,并创建对象。
1.获取对应类的class文件对象
2.使用class文件对象中的方法getConstructor("参数")/getConstructors()获取构造方法Constructor
3.使用构造方法Constructor中的方法newInstance实例化对象
- 通过反射获取成员方法对象,并且调用方法。(重点)
1.获取类对应的class文件对象
2.通过class文件对象中的方法getMethod(参数)/getMethods()获取类中的成员方法Method
3.使用Method类中的方法invoke执行获取到的成员方法
- 注解的作用
1.使用javadoc.exe生成帮助文档:里边可以包含注解@author和@version
2.编译检查:@Override @FunctionalInterface
3.框架配置
- 自定义注解和使用注解(重点)
定义格式:
public @interface 注解名称{
修饰符 返回值类型/数据类型 属性名();
修饰符 返回值类型/数据类型 属性名() default 属性值;
}
使用格式:
没有属性:@注解名
有属性:@注解名(属性名=属性值,属性名=属性值...)
- 元注解及其作用(重点)
java.lang.annotation.Retention:用来声明自定义注解的生命周期(.java文件,.class文件,内存中)
java.lang.annotation.Target:用来声明自定义注解可以使用的位置
- 解析注解并获取注解中的数据(使用)
就是获取注解的属性值==>使用反射技术
isAnnotationPresent 判断(类上,方法上...)是否有指定的注解
getAnnotation 获取(类上,方法上...)的注解


![[JAVA SE]反射与注解的相关知识点 [JAVA SE]反射与注解的相关知识点](http://www.mshxw.com/aiimages/31/337979.png)
