更新時間:2020-04-29 14:11:34 來源:動力節點 瀏覽2937次
我們通常使用new操作符創建新的實例:
Personp=newPerson();
如果通過反射來創建新的實例,可以調用Class提供的newInstance()方法:
Personp=Person.class.newInstance();
調用Class.newInstance()的局限是,它只能調用該類的public無參數構造方法。如果構造方法帶有參數,或者不是public,就無法直接通過Class.newInstance()來調用。
為了調用任意的構造方法,Java的反射API提供了Constructor對象,它包含一個構造方法的所有信息,可以創建一個實例。Constructor對象和Method非常類似,不同之處僅在于它是一個構造方法,并且,調用結果總是返回實例:
importjava.lang.reflect.Constructor;
publicclassMain{
publicstaticvoidmain(String[]args)throwsException{
//獲取構造方法Integer(int):
Constructorcons1=Integer.class.getConstructor(int.class);
//調用構造方法:
Integern1=(Integer)cons1.newInstance(123);
System.out.println(n1);
//獲取構造方法Integer(String)
Constructorcons2=Integer.class.getConstructor(String.class);
Integern2=(Integer)cons2.newInstance("456");
System.out.println(n2);
}
}
通過Class實例獲取Constructor的方法如下:
getConstructor(Class...):獲取某個public的Constructor;
getDeclaredConstructor(Class...):獲取某個Constructor;
getConstructors():獲取所有public的Constructor;
getDeclaredConstructors():獲取所有Constructor。
注意Constructor總是當前類定義的構造方法,和父類無關,因此不存在多態的問題。
調用非public的Constructor時,必須首先通過setAccessible(true)設置允許訪問。setAccessible(true)可能會失敗。
小結
Constructor對象封裝了構造方法的所有信息;
通過Class實例的方法可以獲取Constructor實例:getConstructor(),getConstructors(),getDeclaredConstructor(),getDeclaredConstructors();
通過Constructor實例可以創建一個實例對象:newInstance(Object...parameters);通過設置setAccessible(true)來訪問非public構造方法。
【關鍵:
通過反射來創建新的實例:Personp=Person.class.newInstance();
Constructorcons1=Integer.class.getConstructor(int.class);
//調用構造方法:
Integern1=(Integer)cons1.newInstance(123);
注意Constructor總是當前類定義的構造方法,和父類無關,因此不存在多態的問題。
通過設置setAccessible(true)來訪問非public構造方法。
以上就是動力節點java培訓機構的小編針對“Java基礎學習:java調用構造方法”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習