關於Java的內省與反射
很多同學在深入的接觸Java語言後就會發現這樣兩個詞:反射(Reflection)和內省(Introspector),經常搞不清楚這到底是怎麼回事,在什麼場合下應用以及如何使用?下面YJBYS小編為大家整理了關於Java的內省與反射的文章,希望對你有所幫助。
內省
內省是Java語言對Bean類屬性、事件的一種缺省處理方法。例如類A中有屬性name,那我們可以通過getName,setName來得到其值或者設置新的值。通過getName/setName來訪問name屬性,這就是默認的規則。Java中提供了一套API用來訪問某個屬性的getter/setter方法,通過這些API可以使你不需要了解這個規則,這些API存放於包s中。
一般的做法是通過類Introspector來獲取某個對象的BeanInfo信息,然後通過BeanInfo來獲取屬性的描述器(PropertyDescriptor),通過這個屬性描述器就可以獲取某個屬性對應的getter/setter方法,然後我們就可以通過反射機制來調用這些方法。下面我們來看一個例子,這個例子把某個對象的所有屬性名稱和值都打印出來:
/* *Createdon2004-6-29 */ packagedemo; Info; ospector; ertyDescriptor; publicclassIntrospectorDemo{ Stringname; publicstaticvoidmain(String[]args)throwsException{ IntrospectorDemodemo=newIntrospectorDemo(); ame("WinterLau"); //如果不想把父類的屬性也列出來的話, //那getBeanInfo的第二個參數填寫父類的信息 BeanInfobi=eanInfo(lass(),s); PropertyDescriptor[]props=ropertyDescriptors(); for(inti=0;i<th;i++){ tln(props[i]ame()+"="+ props[i]eadMethod()ke(demo,null)); } } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ =name; } } |
反射
相對而言,反射比內省更容易理解一點。用一句比較白的'話來概括,反射就是讓你可以通過名稱來得到對象(類,屬性,方法)的技術。例如我們可以通過類名來生成一個類的實例;知道了方法名,就可以調用這個方法;知道了屬性名就可以訪問這個屬性的值,還是寫兩個例子讓大家更直觀的瞭解反射的使用方法:
//通過類名來構造一個類的實例 ClassClasscls_str=ame("ng"); //上面這句很眼熟,因為使用過JDBC訪問數據庫的人都用過J Objectstr=cls_nstance(); //相當於Stringstr=newString(); //通過方法名來調用一個方法 StringmethodName="length"; Methodm=cls_ethod(methodName,null); tln("lengthis"+ke(str,null)); //相當於tln(th()); |
上面的兩個例子是比較常用方法。看到上面的例子就有人要發問了:為什麼要這麼麻煩呢?本來一條語句就完成的事情幹嗎要整這麼複雜?沒錯,在上面的例子中確實沒有必要這麼麻煩。不過你想像這樣一個應用程序,它支持動態的功能擴展,也就是説程序不重新啟動但是可以自動加載新的功能,這個功能使用一個具體類來表示。首先我們必須為這些功能定義一個接口類,然後我們要求所有擴展的功能類必須實現我指定的接口,這個規定了應用程序和可擴展功能之間的接口規則,但是怎麼動態加載呢?我們必須讓應用程序知道要擴展的功能類的類名,比如是1,當我們把這個類名(字符串)告訴應用程序後,它就可以使用我們第一個例子的方法來加載並啟用新的功能。這就是類的反射,請問你有別的選擇嗎?
-
Sun國際認證考試證書查詢
一、具體操作流程:1、自考試通過後一個月左右,證書從美國Sun總公司到達Sun北京培訓中心。2、工作人員根據人名單進行數據庫輸入工作。3、將收到的證書與名單進行核對。4、核對無誤後將發送一封郵件給考生索取中文信息。具體中文信息大概包括以下幾點內容:(1)中文...
-
2017年SUN-Java程序員認證考試試題
JAVA程序員廣義上是指一羣以JAVA為謀生手段的軟件開發人員。狹義的説,是指擁有SUN公司JAVA認證的程序員。下面是小編收集的SUN_Java程序員認證考試試題,希望大家認真練習!1.Java中的異常處理機制的簡單和應用。當Java程序違反了Java的語義規則時,Java虛擬機就會將...
-
Java學習要點彙總
Sun公司對Java編程語言的解釋是:Java編程語言是個簡單、面向對象、分佈式、解釋性、健壯、安全與系統無關、可移植、高性能、多線程和動態的語言。下面小編準備了關於Java的學習要點,提供給大家參考!1.你需要精通面向對象分析與設計(OOA/OOD)、涉及模式(GOF,J2EED...
-
Sun認證Java開發員考試介紹
對於企業而言,可以藉助這項認證作為招聘人才的評判標準,或是作為衡量員工技術水準的依據;在個人方面,通過這些認證也可以證明個人的技術能力。下面是小編整理的關於Sun認證Java開發員考試介紹,歡迎大家參考!Sun認證Java程序員考試介紹概述:本課程使學員掌握如何使用...