java 反射
使用Java反射机制可以在运行时期检查Java类的信息,
检查Java类的信息往往是你在使用Java反射机制的时候所做的第一件事情,
通过获取类的信息你可以获取以下相关的内容:
- Class对象
- 类名
- 修饰符
- 包信息
- 父类
- 实现的接口
- 构造器
- 方法
- 变量
- 注解
Class对象
在你想检查一个类的信息之前,你首先需要获取类的Class对象。Java中的所有类型包括基本类型(int, long, float等等),即使是数组都有与之关联的Class类的对象。
编译期间已知类名的获取Class对象的方法
|
编译期间不知道类名的获取Class对象的方法
|
使用Class对象获取信息
类名
|
类的修饰符
|
修饰符都被包装成一个int类型的数字,这样每个修饰符都是一个位标识(flag bit),这个位标识可以设置和清除修饰符的类型。
可以使用java.lang.reflect.Modifier类中的方法来检查修饰符的类型:
Modifier类的判定方法
|
每一个类修饰符的具体定义
|
包信息
|
通过Package对象你可以获取包的相关信息比如”包名“等
父类
|
可以看到superclass对象其实就是一个Class类的实例,所以你可以继续在这个对象上进行反射操作。
实现的接口
|
由于一个类可以实现多个接口,因此getInterfaces();方法返回一个Class数组,在Java中接口同样有对应的Class对象。注意:getInterfaces()方法仅仅只返回当前类所实现的接口。当前类的父类如果实现了接口,这些接口是不会在返回的Class集合中的,尽管实际上当前类其实已经实现了父类接口。
构造器
|
方法
|
成员变量
|
注解
|
案例
Info.java
|
ReflectionBasic.java解析类前面Info.java类的类
|
输出结果
全限定名:com.zq.reflection.Info
类名:Info
是否时public的: true
包名:com.zq.reflection
方法签名: 2 class java.lang.String getNameAndId
属性签名: 2 int id
属性签名: 2 class java.lang.String name
Process finished with exit code 0