Java基礎(chǔ)學(xué)習(xí):Java反射機(jī)制學(xué)習(xí)

Java基礎(chǔ)學(xué)習(xí):Java反射機(jī)制學(xué)習(xí)

長(zhǎng)沙中公優(yōu)就業(yè)      2022-05-06 04:21:02     88

Java基礎(chǔ)學(xué)習(xí):Java反射機(jī)制學(xué)習(xí),1.背景:spring中大量使用了Java的反射特性進(jìn)行IOC,有必要了解Java反射機(jī)制2.基本概念:反射是Java語(yǔ)言的一個(gè)特性,允許程序在

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

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

詳細(xì)介紹

    1.背景:spring中大量使用了Java的反射特性進(jìn)行IOC,有必要了解Java反射機(jī)制

    2.基本概念:反射是Java語(yǔ)言的一個(gè)特性,允許程序在運(yùn)行時(shí)進(jìn)行自我檢查和內(nèi)部成員的操作。如下代碼

    3.反射的優(yōu)點(diǎn)與缺點(diǎn):反射是一種動(dòng)態(tài)編譯(在運(yùn)行時(shí)確定類(lèi)型,綁定對(duì)象),與之對(duì)應(yīng)的是靜態(tài)編譯(在編譯時(shí)確定類(lèi)型,綁定對(duì)象)。反射能發(fā)揮Java的靈活性,降低類(lèi)之間的耦合性。在JavaEE編程中經(jīng)常用到,尤其Spring的IOC就是使用了Java的發(fā)射這一特性。雖然反射能很好的發(fā)揮Java的靈活性,但這也是以犧牲一部分性能為代價(jià)的。

    4.反射常用的API

    (1)獲取class對(duì)象

    在JavaAPI中,獲取Class類(lèi)對(duì)象有三種方法:

    第一種,使用Class.forName靜態(tài)方法。當(dāng)你知道該類(lèi)的全路徑名時(shí),你可以使用該方法獲取Class類(lèi)對(duì)象。如下例子

    Classclz=Class.forName("java.lang.String");

    第二種,使用.class方法。

    這種方法只適合在編譯前就知道操作的Class。如下例子

    Classclz=String.class;

    第三種,使用類(lèi)對(duì)象的getClass()方法。如下例子

    Stringstr=newString("tony");

    Classclz=str.getClass();

    (2)通過(guò)反射創(chuàng)建類(lèi)對(duì)象

    通過(guò)反射創(chuàng)建類(lèi)對(duì)象主要有兩種方式:通過(guò)Class對(duì)象的newInstance()方法、通過(guò)Constructor對(duì)象的newInstance()方法。

    第一種:通過(guò)Class對(duì)象的newInstance()方法。如下例子

    Classclz=User.class;

    Useruser=(User)clz.newInstance();

    第二種:通過(guò)Constructor對(duì)象的newInstance()方法。如下例子

    Classclz=User.class;

    Constructorconstructor=clz.getConstructor();

    Useruser=(User)constructor.newInstance();

    通過(guò)Constructor對(duì)象創(chuàng)建類(lèi)對(duì)象可以選擇特定構(gòu)造方法,而通過(guò)Class對(duì)象則只能使用默認(rèn)的無(wú)參數(shù)構(gòu)造方法。下面的代碼就調(diào)用了一個(gè)有參數(shù)的構(gòu)造方法進(jìn)行了類(lèi)對(duì)象的初始化。如下

    Classclz=User.class;

    Constructorconstructor=clz.getConstructor(String.class,int.class);

    Useruser=(User)constructor.newInstance("tony",18);

    (3)通過(guò)反射獲取屬性、方法、構(gòu)造器等

    我們通過(guò)Class對(duì)象的getFields()方法可以獲取Class類(lèi)的屬性,但無(wú)法獲取私有屬性。而如果使用Class對(duì)象的getDeclaredFields()方法則可以獲取包括私有屬性在內(nèi)的所有屬性。

 以上就是長(zhǎng)沙中公優(yōu)就業(yè)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Java基礎(chǔ)學(xué)習(xí):Java反射機(jī)制學(xué)習(xí)”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問(wèn),請(qǐng)?jiān)诰€(xiàn)咨詢(xún),有專(zhuān)業(yè)老師隨時(shí)為你服務(wù)。

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

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