類的解剖(獲取類的定義信息)




//解析普通的方法
@Test
public void fetchMethods() throws Exception{
//(1)獲得類模板
Class clazz = Class.forName("hncu.reflect.fetch.User");
Method ms[] = clazz.getMethods(); 
//Method ms[] = clazz.getDeclaredMethods();
for(int i=0;i<ms.length;i++){//遍歷所有的方法
Method m = ms[i];
System.out.println("name: "+ m.getName() );//獲得方法名
//System.out.println("annotation: "+ m.getAnnotations() );//獲得註解
System.out.println("ReturnType: "+ m.getReturnType() ); //獲得返回類型

System.out.println("DeclaringClass:"+ m.getDeclaringClass());//獲得該類所屬聲明類




Class paramTypes[] = m.getParameterTypes();//獲得參數類型
for(Class c:paramTypes){
System.out.println("param>> "+c);
}
/*獲取泛型
m.getGenericReturnType();//返回類型中的泛型--Class
m.getExceptionTypes(); //異常中的泛型--Class[]
m.getGenericParameterTypes(); //參數中的泛型 ---Class[]
*/

Class exs[] = m.getExceptionTypes();//獲得異常
for(int j=1;j<=exs.length;j++){
System.out.println("Execption"+j+":: "+ exs[j-1]);
}


int mod = m.getModifiers();//獲得修飾符
System.out.println("modifiers1:"+mod);
System.out.println("modifiers2:"+ Modifier.toString(mod));

System.out.println("--------------------");
}
}



//解析工作方法
@Test
public void fetchConstructors() throws Exception{
Class clazz = Class.forName("hncu.reflect.fetch.User");
//Constructor cons[] = clazz.getConstructors(); 
Constructor cons[] = clazz.getDeclaredConstructors();
for(int i=0;i<cons.length;i++){
Constructor con=cons[i];

//其方法和解析普通的方法差不多但是沒有返回類型,因爲構造方法本身就不含返回值
System.out.println("name:"+con.getName());
//System.out.println("annotation:"+con.getAnnotations());


/*獲取泛型
con.getExceptionTypes(); //異常中的泛型--Class[]
con.getGenericParameterTypes(); //參數中的泛型 ---Class[]
*/
Class paramTypes[] = con.getParameterTypes();//獲得參數類型
for(Class c:paramTypes){
System.out.println("param>> "+c);
}
Class exs[] = con.getExceptionTypes();//獲得異常
for(int j=1;j<=exs.length;j++){
System.out.println("Execption"+j+":: "+ exs[j-1]);
}


int mod =con.getModifiers();//獲得修飾符
System.out.println("modifiers1:"+mod);
System.out.println("modifiers2:"+ Modifier.toString(mod));

System.out.println("--------------------");
}
}

//解剖屬性
@Test
public void fetchFields() throws Exception{
Class clazz=Class.forName("hncu.reflect.fetch.User");

Field fild[]=clazz.getDeclaredFields();

for(int i=0;i<fild.length;i++){
Field fld=fild[i];
System.out.println("name:"+fld.getName());;
System.out.println("DeclaringClass:"+fld.getDeclaringClass());
System.out.println("Type:"+fld.getType());

int mod=fld.getModifiers();
System.out.println("modify:"+Modifier.toString(mod));
System.out.println("----------------------");

}


}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章