Java基礎(chǔ)教程之Java反射

Java基礎(chǔ)教程之Java反射

長沙中公優(yōu)就業(yè)      2022-04-18 22:00:01     11

Java基礎(chǔ)教程之Java反射,反射是Java中核心技術(shù)之一,這里先不定義什么叫反射,先看一個例子    要求:  1)創(chuàng)建一個person的實例,單不能使用Person

課程價格 請咨詢

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

詳細介紹

反射是Java中核心技術(shù)之一,這里先不定義什么叫反射,先看一個例子

  

  要求:

  1)創(chuàng)建一個person的實例,單不能使用Personperson=newPerson()的方式

  2)調(diào)用run()方法,也不能使用person.run()方式

  我們知道要調(diào)用方法必須先要有對象,現(xiàn)在不能通過new關(guān)鍵字來實例化對象,只能通過反射來實現(xiàn)。

  

  上面就實現(xiàn)用反射的方式調(diào)用preson類中的方法??赡苡腥艘獑柫耍瑸槭裁床恢苯觧ew出來呢?通過反射來創(chuàng)建對象,調(diào)用方法多費勁啊?

  關(guān)鍵在于很多時候我們并不能事先知道要new什么對象,相反我們可能只知道一個類的名稱和方法名,很多時候這些名稱都是寫在XML配置當(dāng)中的。

  好多框架中用到了反射,比如sturts,spring,hibernate等,下面舉幾個列子說明

  【Strust2】

  在struts.xml中配置的action

  

  定義的action

  

  Struts2框架本身不知道我們有一個TopicAction這個類,但它可以這樣做,在struts2框架初始化的時候解析你配置的xml,再找到你配置TopicAction,然后通過反射的技術(shù)實例化這個類,等在有人調(diào)用的時候通過反射調(diào)用topicAction中的方法。

  【Hibernate】

  

  文件的定義

  

  在映射文件中建立了數(shù)據(jù)表和對象的映射關(guān)系,所以我們在hibernate中操作的都是對象,但是底層都會轉(zhuǎn)成sql執(zhí)行,比如我們要查詢一個對象,

  Topictopic=session.get(Topic.class,12);

  執(zhí)行過程是這樣的:

  【類名】==>【表明】==>【發(fā)出sql語句】==>【通過反射實例化對象】==>【通過反射調(diào)用setXxx()方法把數(shù)據(jù)庫的值設(shè)進入】

  總結(jié)一下,反射就是在編譯期不知道創(chuàng)建那個類,而是在運行期才知道創(chuàng)建那個類,這種情況下就應(yīng)該考慮到用反射。

  那反射能做什么呢?

  1)獲取一個類的內(nèi)部結(jié)構(gòu),比如:方法,屬性,注解等

  2)運行時對一個Java對象操作,包括實例化對象,調(diào)用方法,給屬性賦值。

  為什么叫反射呢?

  可能是Java程序在運行時能夠看到自己的結(jié)構(gòu)和行為吧,就像看到鏡子當(dāng)中的自己一樣,反射了出來。

  以上就是長沙中公優(yōu)就業(yè)java培訓(xùn)機構(gòu)小編介紹的“Java基礎(chǔ)教程之Java反射”的內(nèi)容,希望對大家有幫助,更多java最新資訊請繼續(xù)關(guān)注長沙中公優(yōu)就業(yè)java培訓(xùn)機構(gòu)官網(wǎng),每天會有精彩內(nèi)容分享與你。

Java基礎(chǔ)教程

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