1

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();
    }
  }
}

苏生
803 声望725 粉丝