/*
* 获取修饰符、数据类型、变量名
*/
public static void test02() {
Class clazz = PersonFull.class;
Field[] declaredFields = clazz.getDeclaredFields();
// 获取修饰符
System.out.println("-------------getModifiers() START--------------");
for (Field tmp : declaredFields) {
int modifiers = tmp.getModifiers();
System.out.println(Modifier.toString(modifiers) + modifiers);
}
System.out.println("-------------getModifiers() END--------------");
System.out.println("-------------getType() START--------------");
for (Field tmp : declaredFields) {
String name = tmp.getType().getName();
System.out.println(name);
}
System.out.println("-------------getType() END--------------");
System.out.println("-------------getName() START--------------");
for (Field tmp : declaredFields) {
String name = tmp.getName();
System.out.println(name);
}
System.out.println("-------------getName() END--------------");
}
2 获取方法
2.1 获取方法结构
方法
返回值
所获取内容
getMethods()
Method[]
获取当前运行时类及其所有父类中声明为public权限的方法
getDeclaredMethods()
Method[]
获取当前运行时类中声明的所有方法(不包含父类中声明的方法)
/*
* 获取运行时类的方法结构
*/
public static void test01() {
Class clazz = PersonFull.class;
Method[] methods = clazz.getMethods();
Method[] declaredMethods = clazz.getDeclaredMethods();
for (Method tmp : methods) {
System.out.println(tmp);
}
// 运行结果
// public int Reflection.GetClass.PersonFull.compareTo(java.lang.String)
// public int Reflection.GetClass.PersonFull.compareTo(java.lang.Object)
// public java.lang.String
// Reflection.GetClass.PersonFull.display(java.lang.String)
// public void Reflection.GetClass.PersonFull.info()
// public void Reflection.GetClass.Creature.eat()
// public final void java.lang.Object.wait() throws
// java.lang.InterruptedException
// public final void java.lang.Object.wait(long,int) throws
// java.lang.InterruptedException
// public final native void java.lang.Object.wait(long) throws
// java.lang.InterruptedException
// public boolean java.lang.Object.equals(java.lang.Object)
// public java.lang.String java.lang.Object.toString()
// public native int java.lang.Object.hashCode()
// public final native java.lang.Class java.lang.Object.getClass()
// public final native void java.lang.Object.notify()
// public final native void java.lang.Object.notifyAll()
System.out.println("------------------");
for (Method tmp : declaredMethods) {
System.out.println(tmp);
}
// 运行结果
// public int Reflection.GetClass.PersonFull.compareTo(java.lang.String)
// public int Reflection.GetClass.PersonFull.compareTo(java.lang.Object)
// public java.lang.String
// Reflection.GetClass.PersonFull.display(java.lang.String)
// private java.lang.String
// Reflection.GetClass.PersonFull.show(java.lang.String)
// public void Reflection.GetClass.PersonFull.info()
}
2.2 获取方法相关信息
方法
返回值
所获取内容
getModifiers()
int
获取权限修饰符
getReturnType()
Class
获取返回值类型
getName()
String
获取方法名
getParameters()
Parameter[]
获取形参类型和形参名
getExceptionTypes()
Class[]
获取异常
getAnnotations()
Annotation[]
获取方法声明的注解
/*
* 获取权限修饰符、返回值类型、方法名(参数类型 形参名)、异常、注解
*/
public static void test02() {
Class clazz = PersonFull.class;
Method[] declaredMethods = clazz.getDeclaredMethods();
// 获取权限修饰符
System.out.println("------------获取权限修饰符--------------");
for (Method tmp : declaredMethods) {
int modifiers = tmp.getModifiers();
System.out.println(Modifier.toString(modifiers));
}
// 获取返回值类型
System.out.println("------------获取返回值类型--------------");
for (Method tmp : declaredMethods) {
Class returnType = tmp.getReturnType();
System.out.println(returnType.getName());
}
// 获取方法名
System.out.println("------------获取方法名--------------");
for (Method tmp : declaredMethods) {
String name = tmp.getName();
System.out.println(name);
}
// 获取形参类型和形参名
System.out.println("------------获取形参类型和形参名--------------");
for (Method tmp : declaredMethods) {
Parameter[] parameters = tmp.getParameters();
for (Parameter tmp_1 : parameters) {
System.out.println(tmp.getName() + " " + tmp_1);
}
}
// 获取异常
System.out.println("------------获取异常--------------");
for (Method tmp : declaredMethods) {
Class[] exceptionTypes = tmp.getExceptionTypes();
for (Class tmp_1 : exceptionTypes) {
System.out.println(tmp.getName() + " " + tmp_1.getName());
}
}
// 获取方法声明的注解
System.out.println("------------获取方法声明的注解--------------");
for (Method tmp : declaredMethods) {
Annotation[] annotations = tmp.getAnnotations();
for (Annotation tmp_1 : annotations) {
System.out.println(tmp_1);
}
}
}
3 其他信息的获取
3.1 获取构造器结构
方法
返回值
所获取内容
getConstructors()
Constructor[]
获取当前运行时类中声明为public权限的构造器
getDeclaredConstructors()
Constructor[]
获取当前运行时类中声明的所有所有构造器
public static void test01() {
Class clazz = PersonFull.class;
Constructor[] constructors = clazz.getConstructors();
Constructor[] declaredConstructors = clazz.getDeclaredConstructors();
for (Constructor tmp : constructors) {
System.out.println(tmp);
}
// 运行结果
// public Reflection.GetClass.PersonFull(java.lang.String,int)
// public Reflection.GetClass.PersonFull(java.lang.String)
// public Reflection.GetClass.PersonFull()
System.out.println("----------------------");
for (Constructor tmp : declaredConstructors) {
System.out.println(tmp);
}
// 运行结果
//public Reflection.GetClass.PersonFull(java.lang.String,int)
//public Reflection.GetClass.PersonFull(java.lang.String)
//public Reflection.GetClass.PersonFull()
}