一、調用運行時類中指定的結構:屬性
@Test
public void testField() throws Exception {
Class clazz = Person.class;
//創建運行時類的對象
Person p = (Person) clazz.newInstance();
//獲取指定的屬性:要求運行時類中屬性聲明爲public
//通常不採用此方法
Field id = clazz.getField("id");
/*
設置當前屬性的值
set():參數1:指明設置哪個對象的屬性 參數2:將此屬性值設置爲多少
*/
id.set(p,1001);
/*
獲取當前屬性的值
get():參數1:獲取哪個對象的當前屬性值
*/
int pId = (int) id.get(p);
System.out.println(pId);
}
/*
如何操作運行時類中的指定的屬性 -- 需要掌握
*/
@Test
public void testField1() throws Exception {
Class clazz = Person.class;
//創建運行時類的對象
Person p = (Person) clazz.newInstance();
//1. getDeclaredField(String fieldName):獲取運行時類中指定變量名的屬性
Field name = clazz.getDeclaredField("name");
//2.保證當前屬性是可訪問的
name.setAccessible(true);
//3.獲取、設置指定對象的此屬性值
name.set(p,"Tom");
System.out.println(name.get(p));
}
二、調用運行時類中指定的結構:方法
/*
如何操作運行時類中的指定的方法 -- 需要掌握
*/
@Test
public void testMethod() throws Exception {
Class clazz = Person.class;
//創建運行時類的對象
Person p = (Person) clazz.newInstance();
/*
1.獲取指定的某個方法
getDeclaredMethod():參數1 :指明獲取的方法的名稱 參數2:指明獲取的方法的形參列表
*/
Method show = clazz.getDeclaredMethod("show", String.class);
//2.保證當前方法是可訪問的
show.setAccessible(true);
/*
3. 調用方法的invoke():參數1:方法的調用者 參數2:給方法形參賦值的實參
invoke()的返回值即爲對應類中調用的方法的返回值。
*/
Object returnValue = show.invoke(p,"CHN"); //String nation = p.show("CHN");
System.out.println(returnValue);
System.out.println("*************如何調用靜態方法*****************");
// private static void showDesc()
Method showDesc = clazz.getDeclaredMethod("showDesc");
showDesc.setAccessible(true);
//如果調用的運行時類中的方法沒有返回值,則此invoke()返回null
// Object returnVal = showDesc.invoke(null);
Object returnVal = showDesc.invoke(Person.class);
System.out.println(returnVal);//null
}
三、調用運行時類中指定的結構:構造器
/*
如何調用運行時類中的指定的構造器
*/
@Test
public void testConstructor() throws Exception {
Class clazz = Person.class;
//private Person(String name)
/*
1.獲取指定的構造器
getDeclaredConstructor():參數:指明構造器的參數列表
*/
Constructor constructor = clazz.getDeclaredConstructor(String.class);
//2.保證此構造器是可訪問的
constructor.setAccessible(true);
//3.調用此構造器創建運行時類的對象
Person per = (Person) constructor.newInstance("Tom");
System.out.println(per);
}
以上就是java反射中調用運行時類的指定結構的介紹,如果有不當之處或者遇到什麼問題,歡迎在文章下面留言~
如果你想了解更多關於Java的內容,可以查看:Java學習之路
轉載請註明:https://blog.csdn.net/weixin_44662961/article/details/106276411