反射
一.简介
1.类加载
将class文件读取到内存中的过程,称为类加载。加载出来的class文件被封装为Class对象
class文件的加载由ClassLoader 完成 – 类加载器
类加载器三种类型
- BootStrapClassLoader 启动类加载器 c++写的 加载java_home/jre/lib 路径下的文件
- ExtClassLoader 扩展类加载器 java_home/jre/lib/ext
- AppClassLoader 系统类加载器 加载src下的类(自己写的类)
- 使用类名.class.getClassLoader()获取当前的类加载器
2.反射(reflect)
在程序运行状态中
- 对于任意一个类,都可以获取该类的属性和方法
- 对于任意一个对象,都可以调用该对象的属性和方法
这种在运行时动态的获取信息和动态的调用对象的方法 的功能 — 反射
3.相关的接口和类
反射中的接口和类都在java.lang包中
java在编码是知道 类,对象,的具体信息,直接操作类和对象
在编码时,不知道类,对象的信息,通过反射操作类和对象
接口 类 | 含义 |
---|---|
Class | 表示当前运行时类 (字节码) |
Filed | 表示类中的属性 |
Method | 方法 |
Constructor | 构造方法 |
Package | 包 |
Modifier | 修饰符 |
Parameter | 参数 |
Annotation | 注解 |
二.Class
1.简介
运行的类,用Class对象来表示
Class 类是反射的核心,操作属性,方法等,都要获取Class对象
- Class对象在类加载时由JVM自动创建,一个类对应一个Class对象
- Class类 没有公共的构造方法,不能new 可以通过方法获取实例
2.获取Class对象
- 调用对象的getClass()
- 类名.class
- Class.forName(“完整类名”) 静态方法
三.反射操作
1.Field
2.Method
3.Constructor
4.注解
4.1简介
注解是一种新的类型,与接口相似,与类,接口,枚举都是同一层次
注解就是一种标记, 以@开头 @xxx 可以声明在类,属性 , 方法, 参数的前面
用来对元素进行说明 标注 或是实现特定功能
4.2JDK自带的注解
4.3自定义注解
定义方式:
//元注解
public @interface 注解名{
}
注解名 | 作用 |
---|---|
@Target | 定义注解的作用域 |
@Retention | 注解的生命周期 |
使用自定注解:
@主注解名(属性名=属性值,属性名=属性值)
- 在使用时,需要为注解中定义的抽象方法指定返回值,也称为:给注解指定属性值
- 属性名就是注解中的抽象方法名
- 如果抽象方法名为value,那么使用时,可以省略属性名