成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

Java筆記-反射機(jī)制(一)

AWang / 437人閱讀

摘要:反射機(jī)制一結(jié)合官方通過(guò)編寫(xiě)的反射教程,復(fù)習(xí)一下反射的知識(shí)。反射的概念反射是一種在運(yùn)行時(shí)獲取以及修改應(yīng)用行為的一種工具。因?yàn)榉瓷湫枰獎(jiǎng)討B(tài)的解析類(lèi)的信息,相比于非反射使用的方式要慢。反射需要獲取一定的運(yùn)行時(shí)權(quán)限,在特定的安全環(huán)境下不一定存在。

Java反射機(jī)制(一)

結(jié)合Oracle官方通過(guò)JDK8編寫(xiě)的反射教程,復(fù)習(xí)一下反射的知識(shí)。結(jié)尾篇補(bǔ)一個(gè)小例子。

主要內(nèi)容

這次博客的主要內(nèi)容就是簡(jiǎn)單介紹反射的概念以及相關(guān)獲取類(lèi)信息的反射API。

反射的概念

反射是一種在運(yùn)行時(shí)獲取以及修改應(yīng)用行為的一種工具。我個(gè)人的理解就是,new是一種正向的操作,知道現(xiàn)有系統(tǒng)中會(huì)出現(xiàn)什么。反射就是反著來(lái),不知道系統(tǒng)中可能會(huì)需要什么樣的類(lèi),通過(guò)全限定類(lèi)名的方式,在需要的時(shí)候?qū)⑺瓷涑鰜?lái),同時(shí)可以通過(guò)反射獲取類(lèi)的內(nèi)部信息。在Java框架的開(kāi)發(fā)中,反射技術(shù)運(yùn)用比較常見(jiàn)。

反射的優(yōu)缺點(diǎn) 優(yōu)點(diǎn)

強(qiáng)大的擴(kuò)展性,用戶(hù)可以通過(guò)全限定類(lèi)名的方式去使用外部定義的類(lèi)。

幫助IDE開(kāi)發(fā)工具獲取用戶(hù)正在開(kāi)發(fā)的code的信息,提示寫(xiě)出更正確的代碼。

利于調(diào)試工具獲取運(yùn)行時(shí)信息以及測(cè)試類(lèi)框架的使用比如Junit。

缺點(diǎn)

影響性能。 因?yàn)榉瓷湫枰獎(jiǎng)討B(tài)的解析類(lèi)的信息,相比于非反射使用的方式要慢。

對(duì)安全環(huán)境有要求。 反射需要獲取一定的運(yùn)行時(shí)權(quán)限,在特定的安全環(huán)境下不一定存在。

暴露了內(nèi)部的封裝,可能會(huì)引起一些負(fù)面效果。比如不該被外部調(diào)用的私有方法,通過(guò)反射被調(diào)用了。

通過(guò)反射獲取類(lèi)信息

Java中除了基本類(lèi)型就是引用類(lèi)型。
boolean,int,long,float等就是基本類(lèi)型
java.lang.String,Java.io.Serializable就是引用類(lèi)型

獲取java.lang.Class

對(duì)于每一種類(lèi)型,Java提供了java.lang.Class這個(gè)類(lèi)用于獲取運(yùn)行時(shí)類(lèi)的屬性和方法信息。同時(shí)java.lang.Class也可以用于創(chuàng)建類(lèi)和對(duì)象。
如果是對(duì)象類(lèi)型的話(huà),可以通過(guò)其最上層父類(lèi)Object提供的getClass()方法獲取Class類(lèi)。

"apple".getClass();

如果是基本類(lèi)型或者對(duì)于一個(gè)普通的類(lèi)來(lái)說(shuō),可以使用.class的方式來(lái)獲取Class類(lèi),如下。

int.class;
java.io.PrintStream.class;

當(dāng)獲取到類(lèi)的全限定類(lèi)名后,可以通過(guò)Class.forName創(chuàng)建一個(gè)類(lèi),如下。

Class c = Class.forName("com.coderising.kailuncen.Main");
獲取類(lèi)的相關(guān)類(lèi)信息

以下Api可以用于獲取類(lèi)的相關(guān)類(lèi)信息。
獲取類(lèi)的父類(lèi)信息:

Class.getSuperclass()

獲取類(lèi)的成員類(lèi)信息,不包括私有的:

Class.getClasses()

獲取類(lèi)的所有成員類(lèi)信息,包括私有的:

Class.getDeclaredClasses()

以下API可以返回聲明了這些成員變量的類(lèi)的Class信息。

Class.getDeclaringClass()
java.lang.reflect.Field.getDeclaringClass()
java.lang.reflect.Method.getDeclaringClass()
java.lang.reflect.Constructor.getDeclaringClass()

如果這個(gè)類(lèi)是匿名類(lèi)的話(huà),可以通過(guò)如下API獲取包含它的類(lèi)的類(lèi)信息。

Class.getEnclosingClass()
獲取類(lèi)的修飾符

類(lèi)在運(yùn)行期間可以被多種修飾符修飾,如下所示
訪問(wèn)限定符: public, protected, and private。
需要override的修飾符:abstract。
然后static,final,Annotations等。
反射API可以使用如下方法去訪問(wèn)他們。

 Class.getModifiers()
 Class.getAnnotations();
獲取類(lèi)的成員信息

在oracle的教程中,整理了三個(gè)表格,介紹了如何獲取類(lèi)的成員信息。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/70714.html

相關(guān)文章

  • 反射機(jī)制與原理筆記

    反射機(jī)制與原理筆記 聲明 文章均為本人技術(shù)筆記,轉(zhuǎn)載請(qǐng)注明出處https://segmentfault.com/u/yzwall 反射機(jī)制 反射:當(dāng)程序無(wú)法獲知對(duì)象類(lèi)型時(shí),在運(yùn)行期間動(dòng)態(tài)獲取類(lèi)的所有屬性和方法,這種動(dòng)態(tài)獲取類(lèi)信息和動(dòng)態(tài)調(diào)用對(duì)象方法的功能稱(chēng)為反射機(jī)制;反射機(jī)制實(shí)現(xiàn):Class類(lèi)與java.lang.reflect類(lèi)庫(kù)一起實(shí)現(xiàn)機(jī)制,java.lang.reflect類(lèi)庫(kù)包含F(xiàn)ield...

    fobnn 評(píng)論0 收藏0
  • Java筆記-反射機(jī)制(三)-小demo

    摘要:經(jīng)過(guò)前面幾次反射機(jī)制的學(xué)習(xí),這次用反射的知識(shí)寫(xiě)一個(gè)類(lèi)似于框架處理機(jī)制的小。和在引入反射知識(shí)前,先簡(jiǎn)單介紹下框架和。再次使用反射獲取的最新值,組成返回,同時(shí)根據(jù)方法的返回值,去中獲取對(duì)應(yīng)的。最后根據(jù)的返回值和的名稱(chēng)組成最終展示的視圖。 經(jīng)過(guò)前面幾次反射機(jī)制的學(xué)習(xí),這次用反射的知識(shí)寫(xiě)一個(gè)類(lèi)似于Struts框架處理機(jī)制的小demo。 Servlet 和 Sturts 在引入反射知識(shí)前,先簡(jiǎn)單...

    zhangwang 評(píng)論0 收藏0
  • Java學(xué)習(xí)筆記系列-反射

    摘要:反射的本質(zhì)在運(yùn)行時(shí)能夠獲得或判斷某個(gè)對(duì)象的類(lèi)型信息有一條前提就是某個(gè)對(duì)象的類(lèi)型信息在編譯時(shí)必須已知。反射在中用來(lái)支持其他特性的,例如對(duì)象的序列化和對(duì)象對(duì)象是進(jìn)行反射操作的入口所以首先必須獲得對(duì)象。 反射的本質(zhì) Java在運(yùn)行時(shí)能夠獲得或判斷某個(gè)對(duì)象的類(lèi)型信息 RTTI有一條前提就是某個(gè)對(duì)象的類(lèi)型信息在編譯時(shí)必須已知。RTTI的實(shí)質(zhì)就是編譯器在遍歷檢查代碼時(shí)偷偷將類(lèi)型信息記錄下來(lái)并存儲(chǔ)...

    wing324 評(píng)論0 收藏0
  • Java編程思想》筆記14.類(lèi)型信息

    摘要:接口與類(lèi)型信息關(guān)鍵字的一種重要目標(biāo)就是允許程序員隔離構(gòu)件,進(jìn)而降低耦合性。如果你編寫(xiě)接口,那么就可以實(shí)現(xiàn)這一目標(biāo),但是通過(guò)類(lèi)型信息,這種耦合性還是會(huì)傳播出去接口并非是對(duì)解耦的一種無(wú)懈可擊的保障。 點(diǎn)擊進(jìn)入我的博客 運(yùn)行時(shí)類(lèi)型信息使得你可以在運(yùn)行時(shí)發(fā)現(xiàn)和使用類(lèi)型信息,主要有兩種方式: 傳統(tǒng)的RTTI,它假定我們?cè)诰幾g時(shí)已經(jīng)知道了所有的類(lèi)型; 反射機(jī)制,它允許我們?cè)谶\(yùn)行時(shí)發(fā)現(xiàn)和使用類(lèi)的...

    Hwg 評(píng)論0 收藏0
  • Java基礎(chǔ)-模塊系統(tǒng)筆記(1)

    摘要:模塊系統(tǒng)的前身是項(xiàng)目。最初,該項(xiàng)目?jī)H僅是為設(shè)計(jì)實(shí)現(xiàn)一個(gè)模塊系統(tǒng)。隨著項(xiàng)目的不斷深入,平臺(tái)對(duì)標(biāo)準(zhǔn)模塊系統(tǒng)的呼求也日益增長(zhǎng),批準(zhǔn)該項(xiàng)目升級(jí)為平臺(tái)的一部分,也能服務(wù)于和平臺(tái)的需求。自定義的配置,僅包含一組指定的模塊及其所需的模塊。 我的博客 轉(zhuǎn)載請(qǐng)注明原創(chuàng)出處。 序 從Java 9開(kāi)始,在Java的世界里多了一個(gè)叫模塊(JSR376)的特性。模塊系統(tǒng)的前身是Jigsaw項(xiàng)目。最初,該項(xiàng)目?jī)H...

    learning 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<