通过反射,可以获取到运行时类的完整结构,如下:
package com.love.reflection;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class TestClass02 {
public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, NoSuchMethodException {
Class<?> c = Class.forName("com.love.reflection.Student");
System.out.println("---------------类名-----------------");
System.out.println("包名+类名" + c.getName());
System.out.println("简单类名" + c.getSimpleName());
System.out.println("---------------属性-----------------");
Field[] fields = c.getFields();
System.out.println(fields.length);
fields = c.getDeclaredFields();
for (Field field : fields) {
System.out.println("所有属性" + field);
}
Field name = c.getDeclaredField("name");
System.out.println("指定属性" + name);
System.out.println("---------------方法-----------------");
Method[] methods01 = c.getMethods();
for (Method method : methods01) {
System.out.println("public方法" + method);
}
Method[] methods02 = c.getDeclaredMethods();
for (Method method : methods02) {
System.out.println("所有方法" + method);
}
Method method = c.getMethod("getName", null);
System.out.println("指定无参方法" + method);
Method mtTest = c.getDeclaredMethod("getName", null);
System.out.println("测试Declared指定无参方法" + mtTest);
Method mt = c.getDeclaredMethod("sayHello", null);
System.out.println("指定有参方法" + mt);
System.out.println("---------------构造器-----------------");
Constructor<?>[] constructors = c.getConstructors();
for (Constructor<?> constructor : constructors) {
System.out.println("public构造器" + constructor);
}
Constructor<?>[] declaredConstructors = c.getDeclaredConstructors();
for (Constructor<?> declaredConstructor : declaredConstructors) {
System.out.println("所有构造器" + declaredConstructor);
}
Constructor ct = c.getDeclaredConstructor(String.class, int.class);
System.out.println("指定构造器" + ct);
Constructor ctTest = c.getConstructor(String.class, int.class);
System.out.println("测试Declared指定构造器" + ctTest);
}
}