Java基礎(chǔ)學(xué)習(xí):java調(diào)用構(gòu)造方法

Java基礎(chǔ)學(xué)習(xí):java調(diào)用構(gòu)造方法

深圳達(dá)內(nèi)教育      2022-04-09 10:00:01     8

Java基礎(chǔ)學(xué)習(xí):java調(diào)用構(gòu)造方法,我們通常使用new操作符創(chuàng)建新的實(shí)例:Personp=newPerson();如果通過反射來創(chuàng)建新的實(shí)例,可以調(diào)用Class提供的newInstance()方法

課程價(jià)格 請(qǐng)咨詢

上課時(shí)段: 授課校區(qū):

詳細(xì)介紹

    我們通常使用new操作符創(chuàng)建新的實(shí)例:

    Personp=newPerson();

    如果通過反射來創(chuàng)建新的實(shí)例,可以調(diào)用Class提供的newInstance()方法:

    Personp=Person.class.newInstance();

    調(diào)用Class.newInstance()的局限是,它只能調(diào)用該類的public無參數(shù)構(gòu)造方法。如果構(gòu)造方法帶有參數(shù),或者不是public,就無法直接通過Class.newInstance()來調(diào)用。

    為了調(diào)用任意的構(gòu)造方法,Java的反射API提供了Constructor對(duì)象,它包含一個(gè)構(gòu)造方法的所有信息,可以創(chuàng)建一個(gè)實(shí)例。Constructor對(duì)象和Method非常類似,不同之處僅在于它是一個(gè)構(gòu)造方法,并且,調(diào)用結(jié)果總是返回實(shí)例:

    importjava.lang.reflect.Constructor;

    publicclassMain{

    publicstaticvoidmain(String[]args)throwsException{

    //獲取構(gòu)造方法Integer(int):

    Constructorcons1=Integer.class.getConstructor(int.class);

    //調(diào)用構(gòu)造方法:

    Integern1=(Integer)cons1.newInstance(123);

    System.out.println(n1);

    //獲取構(gòu)造方法Integer(String)

    Constructorcons2=Integer.class.getConstructor(String.class);

    Integern2=(Integer)cons2.newInstance("456");

    System.out.println(n2);

    }

    }

    通過Class實(shí)例獲取Constructor的方法如下:

    getConstructor(Class...):獲取某個(gè)public的Constructor;

    getDeclaredConstructor(Class...):獲取某個(gè)Constructor;

    getConstructors():獲取所有public的Constructor;

    getDeclaredConstructors():獲取所有Constructor。

    注意Constructor總是當(dāng)前類定義的構(gòu)造方法,和父類無關(guān),因此不存在多態(tài)的問題。

    調(diào)用非public的Constructor時(shí),必須首先通過setAccessible(true)設(shè)置允許訪問。setAccessible(true)可能會(huì)失敗。

    小結(jié)

    Constructor對(duì)象封裝了構(gòu)造方法的所有信息;

    通過Class實(shí)例的方法可以獲取Constructor實(shí)例:getConstructor(),getConstructors(),getDeclaredConstructor(),getDeclaredConstructors();

    通過Constructor實(shí)例可以創(chuàng)建一個(gè)實(shí)例對(duì)象:newInstance(Object...parameters);通過設(shè)置setAccessible(true)來訪問非public構(gòu)造方法。

    【關(guān)鍵:

    通過反射來創(chuàng)建新的實(shí)例:Personp=Person.class.newInstance();

    Constructorcons1=Integer.class.getConstructor(int.class);

    //調(diào)用構(gòu)造方法:

    Integern1=(Integer)cons1.newInstance(123);

    注意Constructor總是當(dāng)前類定義的構(gòu)造方法,和父類無關(guān),因此不存在多態(tài)的問題。

    通過設(shè)置setAccessible(true)來訪問非public構(gòu)造方法。

 以上就是深圳達(dá)內(nèi)教育java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java基礎(chǔ)學(xué)習(xí):java調(diào)用構(gòu)造方法”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。

Java基礎(chǔ)學(xué)習(xí)

培訓(xùn)啦提醒您:交易時(shí)請(qǐng)核實(shí)對(duì)方資質(zhì),對(duì)于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險(xiǎn),謹(jǐn)防上當(dāng)。