1、JAVA反射機制(Reflection)
在運作狀态中,對于任意一個類,都能夠知道這個類的所有屬性和方法;
對于任意一個對象,都能夠調用它的任意方法和屬性;
這種動态擷取資訊以及動态調用對象方法的功能稱為java語言的反射機制。
--->程式運作時,允許改變程式結構或變量類型,這種語言稱為動态語言。
從這個觀點看,Perl,Python,Ruby是動态語言,C++,Java,C#不是動态語言。
但是JAVA有着一個非常突出的動态相關機制:Reflection,
用在Java身上指的是我們可以于運作時加載、探知、使用編譯期間完全未知的classes。
換句話說,Java程式可以加載一個運作時才得知名稱的class,獲悉其完整構造
(但不包括methods定義),并生成其對象實體、
或對其fields設值、或喚起其methods。這種“看透class”的能力 被稱為
introspection(内省、内觀、檢討)。<---
Reflection和introspection是常被并提的兩個術語。
2、Java内省機制(Introspector)
内省是Java語言對Bean類屬性、事件的一種預設處理方法。
例如類A中有屬性name,那我們可以通過getName,setName來得到其值或者設定新的值。
--->一般的做法是通過類Introspector來擷取某個對象的BeanInfo資訊,
然後通過BeanInfo來擷取屬性的描述器(PropertyDescriptor),
通過這個屬性描述器就可以擷取某個屬性對應的getter/setter方法,
然後我們就可以通過反射機制來調用這些方法。<---
3、内省和反射差別?
反射式在運作狀态把Java類中的各種成分映射成相應的Java類,
可以動态的擷取所有的屬性以及動态調用任意一個方法,強調的是運作狀态。
内省機制是通過反射來實作的,BeanInfo用來暴露一個bean的屬性、方法和事件,
以後我們就可以操縱該JavaBean的屬性
**********************************************
擴充:
1、class類
衆所周知Java有個Object 類,是所有Java 類的繼承根源,
其内聲明了數個應該在所有Java 類中被改寫的方法:hashCode()、
equals()、clone()、toString()、getClass()等。
其中getClass()傳回一個Class 對象。
Class object 誕生管道--1)運用getClass()
2)運用Class.getSuperclass()
3)運用static method------Class.forName()(最常被使用)
2、關于Java編輯
詹姆斯·戈士林博士以“Java技術之父”聞名于世。他是Java技術的創始人,
作為Sun研究院院士,他親手設計了Java語言,完成了Java技術的原始編
譯器和虛拟機。在他的帶領下,Java現已成為網際網路的标準程式設計模式以及
分布式企業級應用的事實标準,其跨平台的技術優勢為網絡計算帶來了劃
時代的變革。目前,戈士林博士積極緻力于軟體開發工具的研究,以使軟體
開發工具的功能更強大,更容易為開發人員所使用,確定應用、服務開發的迅速完成。
Java技術是Sun公司在1995年5月正式推出的。二十多年來,Java已從程式設計語言
發展成為全球第一大通用開發平台。Java技術已為計算機行業主要公司所采納,
同時也被越來越多的國際技術标準化組織所接受。1999年,Sun推出了以Java 2
平台為核心的J2EE、J2SE和J2ME三大平台。随着三大平台的迅速推進,在世界上
形成了一股巨大的Java應用浪潮。同時,Java技術還引發了一場無法停止的大變革,
為整個Java社團帶來了巨大的潮水般的商業機會。
Java技術及其應用将有更大的發展。據IDC預計,自2001年起的其後5年内,采用
Java的IT産品的價值将翻番,在2006年将達到4.53億美元,年增長率為14.9%。截
止到2003年5月,注冊Java Developer Connection (JDC)的Java開發商超過300
萬人,對JRE(Java運作環境)的下載下傳達7,200萬次。Sun在JavaOne 2003大會上确定
的目标是,在3~5年内使Java技術開發商從今天的300萬發展到1,000萬,以支援
Java技術這一全球領先技術平台的顯赫地位。