开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的9天,点击查看活动详情
四.反射获取类的结构信息
1.第一组:java.lang.Class类
1.getName:获取全类名
2.getSimpleName:获取简单类名
3.getFields:获取所有publicf修饰的属性,包含本类以及父类的
4.getDeclaredFields:获取本类中所有属性
5.getMethods:获取所有public修饰的方法,包含本类以及父类的
6.getDeclaredMethods:获取本类中所有方法
7.getConstructors:获取所有public修饰的构造器,包含本类
8.getDeclaredConstructors:获取本类中所有构造器
9.getPackage:以Package]形式返回包信息
10.getSuperClass:以Class形式返回父类信息
11.getInterfaces:以Class[]形式返回接口信息
12.getAnnotations:以Annotation[]形式返回注解信息
/**
* @author LeeZhi
* @version 1.0
* 演示如何通过反射获取类的结构信息
*/
public class ReflectionUtils {
public static void main(String[] args) {
}
//第一组方法API
@Test
public void api_01() throws ClassNotFoundException {
/**
* 1.getName:获取全类名
* 2.getSimpleName:获取简单类名
* 3.getFields:获取所有publicf修饰的属性,包含本类以及父类的
* 4.getDeclaredFields:获取本类中所有属性
* 5.getMethods:获取所有public修饰的方法,包含本类以及父类的
* 6.getDeclaredMethods:获取本类中所有方法
* 7.getConstructors:获取本类所有public修饰的构造器
* 8.getDeclaredConstructors:获取本类中所有构造器
* 9.getPackage:以Package]形式返回包信息
* 10.getSuperClass:以Class形式返回父类信息
* 11.getInterfaces:以Class[]形式返回接口信息
* 12.getAnnotations:以Annotation[]形式返回注解信息
*/
//1.得到Class对象
Class<?> personCls = Class.forName("com.gbx.reflection.Person");
System.out.println(personCls.getName());
System.out.println(personCls.getSimpleName());
Field[] fields = personCls.getFields();
for (Field field : fields) {
System.out.println("本类以及父类的属性:" + field.getName());
}
Field[] declaredFields = personCls.getDeclaredFields();
for (Field declaredField : declaredFields) {
System.out.println("本类所有属性:"+declaredField.getName());
}
Method[] methods = personCls.getMethods();
for (Method method : methods) {
System.out.println("本类及父类的方法:" + method.getName());
}
Method[] declaredMethods = personCls.getDeclaredMethods();
for (Method declaredMethod : declaredMethods) {
System.out.println("本类所有方法:" + declaredMethod.getName());
}
Constructor<?>[] constructors = personCls.getConstructors();
for (Constructor<?> constructor : constructors) {
System.out.println("本类的构造器:" + constructor.getName());
}
Constructor<?>[] declaredConstructors = personCls.getDeclaredConstructors();
for (Constructor<?> declaredConstructor : declaredConstructors) {
System.out.println("本类中所有构造器:" + declaredConstructor.getName());
}
System.out.println(personCls.getPackage());
Class<?> superclass = personCls.getSuperclass();
System.out.println("父类的class对象"+superclass);
Class<?>[] interfaces = personCls.getInterfaces();
for (Class<?> anInterface : interfaces) {
System.out.println("接口信息:" + anInterface);
}
Annotation[] annotations = personCls.getAnnotations();
for (Annotation annotation : annotations) {
System.out.println("注解信息:" + annotation);
}
}
}
class A{
public String hobby;
public void hi(){
}
public A() {
}
}
interface IA{
}
interface IB{
}
class Person extends A implements IA,IB{
//属性
public String name;
protected int age;
String job;
private double sal;
public Person() {
}
public Person(String name) {
this.name = name;
}
private Person(String name,int age){
}
//方法
public void m1(){
}
protected void m2(){
}
void m3(){
}
private void m4(){
}
}
2.第二组:java.lang.reflect.Field类
1.getModifiers:以int形式返回修饰符 [说明:默认修饰符是0,public是1,private是2,protected是4,static是8,final是16] public(1)+static (8)=9
2.getType:以Class形式返回类型 3.getName:返回属性名
@Test
public void api_02() throws ClassNotFoundException {
//1.得到Class对象
Class<?> personCls = Class.forName("com.gbx.reflection.Person");
Field[] declaredFields = personCls.getDeclaredFields();
for (Field declaredField : declaredFields) {
System.out.println("本类所有属性:"+declaredField.getName()
+"该属性的修饰值:"+declaredField.getModifiers()
+"该属性的类型"+declaredField.getType());
}
}
3.第三组:java.lang.reflect.Method类
1.getModifiers:以int形式返回修饰符 [说明:默认修饰符是0,public是1,private是2,protected是4,static是8,final是16]
2.getReturnType:以Classj形式获取返回类型
3.getName:返回方法名
4.getParameterTypes:以Class[]返回参数类型数组
Method[] declaredMethods = personCls.getDeclaredMethods();
for (Method declaredMethod : declaredMethods) {
System.out.println("本类所有方法:" + declaredMethod.getName()
+"该方法的访问修饰符"+declaredMethod.getModifiers()
+"该方法返回类型"+declaredMethod.getReturnType());
//输出当前这个方法的形参数组情况
Class<?>[] parameterTypes = declaredMethod.getParameterTypes();
for (Class<?> parameterType : parameterTypes) {
System.out.println("该方法形参类型:" + parameterType);
}
}
4.第四组:java.lang.reflect.Constructor类
1.getModifiers:以int形式返回修饰符
2.getName:返回构造器名(全类名)
3.getParameterTypes:以Class[]返回参数类型数组
Constructor<?>[] declaredConstructors = personCls.getDeclaredConstructors();
for (Constructor<?> declaredConstructor : declaredConstructors) {
System.out.println("本类中所有构造器:" + declaredConstructor.getName());
Class<?>[] parameterTypes = declaredConstructor.getParameterTypes();
for (Class<?> parameterType : parameterTypes) {
System.out.println("该构造器的形参类型:" + parameterType);
}
}