Java知识点总结(反射-获取类的信息)
@(Java知识点总结)[Java, 反射]
应用反射的API,获取类的信息(类的名字、属性、方法、构造器等)
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;public class Test02 {// 获取类名private static void getName(Class clazz){String name = clazz.getName();System.out.println(name); // com.gs.Student 类的全路径名称String simpleName = clazz.getSimpleName() ;System.out.println(simpleName); // Student 类名}// 获取属性信息private static void getFields(Class clazz){Field[] fields = clazz.getFields() ; // 只能获取 public 的属性for (Field f : fields) {System.out.println(f); // public double com.gs.Student.score}Field[] declaredFields = clazz.getDeclaredFields() ; // 获取所有的属性for (Field df : declaredFields) {System.out.println(df);}try {Field field = clazz.getField("score"); //根据属性名称获取public 属性System.out.println(field);Field declaredField = clazz.getDeclaredField("name");System.out.println(declaredField); //根据属性名称获取 private 属性} catch (NoSuchFieldException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();}}// 获取方法信息public static void getMethod(Class clazz){Method[] methods = clazz.getMethods() ; //获取所有的 public 方法,包括父类的方法for (Method m : methods) {System.out.println(m);}System.out.println("~~~~~~~~~~~");Method[] declaredMethods = clazz.getDeclaredMethods(); // 获取本类声明的所有的方法for (Method dm : declaredMethods) {System.out.println(dm);}try {Method m = clazz.getMethod("getName", null); //获取指定名字的方法,后面的形参表示获取方法的参数类类型System.out.println(m);//如果方法有参,则必须传递参数类型对应的 Class 对象 Method dm = clazz.getDeclaredMethod("setName", String.class);System.out.println(dm);} catch (NoSuchMethodException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();}}// 获取构造方法信息public static void getConstructor(Class clazz){try {// 获取指定名称的构造方法Constructor c = clazz.getDeclaredConstructor(int.class,String.class);System.out.println(c);//获取所有构造方法Constructor[] cs= clazz.getConstructors() ;for (Constructor constructor : cs) {System.out.println(constructor);}} catch (NoSuchMethodException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();}}public static void main(String[] args) {String path = "com.gs.Student";try {Class clazz = Class.forName(path);//getName(clazz);//getFields(clazz);//getMethod(clazz);getConstructor(clazz);} catch (ClassNotFoundException e) {e.printStackTrace();}}
}