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