java.lang.reflect包
Constructor、Field、Method的父類是AccessibleObject;
說明:反射主要用於開發架構,即製作架構;
一、獲得Class對象
Class<?> c = Class.forName("classname"); 拋出ClassNotFoundException
二、獲得實現介面
Class<?> inters[] = c.getInterfaces();
for(int i=0;i<inters.length;i++){
System.out.print(inters[i].getName()+" "); //getName()方法為取得介面名稱;
}
三、獲得父類
Class<?> superClass = c.getSuperclass(); //獲得父類
String name = superClass.getName(); //獲得父類名稱
四、取得構造方法
Constructor cons[] = c.getConstructors(); //獲得公開的構造方法
Constructor dcons[] = c.getDeclaredConstructors(); //獲得全部構造方法
String modifier = Modifier.toString(cons[i].getModifiers()); //獲得存取權限
String name = cons[i].getName(); //獲得構造方法名稱
Class<?> params[] = cons[i].getParameterTypes(); //獲得參數類型對象
五、獲得Method
Method ms[] = c.getMethods(); //返回公用的全部方法,包括繼承方法
Method dms[] = c.getDeclaredMethods(); //返回本類全部方法,不包括繼承的方法
Class<?> rt = ms[i].getReturnType();
Class<?>params[] = ms[i].getParameterTypes();
String name = ms[i].getName();
String modifier = Modifier.toString(ms[i].getModifiers());
Class<?>ex[] = ms[i].getExceptionTypes(); //獲得異常
String name = ex[i].getName(); //獲得異常名稱
六、獲得Field
Field fs[] = c.getFields(); //獲得公用屬性,包括繼承屬性
Field dfs[] = c.getDeclaredFields(); // 獲得本類全部屬性
Class<?> type = fs[i].getType(); //獲得屬性的類型對象
String name = fs[i].getName(); //獲得屬性的名稱
String modifier = Modifier.toString(fs[i].getModifiers());
七、通過反射建立一個對象(1)
Class<?> c = Class.forName("Person");
Person p = (Person)c.newInstance();
(2)
Constructor con = c1.getConstructor(Class....param);
Object obj = con.newInstance(Object obj); //根據建構函式建立一個執行個體
八、Constructor建立對象
Class c = Class.forName("Person");
Constructor<?> cons[] = c.getConstructors();
Person p = (Person)cons[0].newInstance("xiazdong",15);
註:如果調用的建構函式為私人,則需要c.setAccessible(true);