功能
Java反射機制主要提供了以下功能:在運行時判斷任意一個對象所屬的類;在運行時構造任意一個類的對象;在運行時判斷任意一個類所具有的成員變量和方法;在運行時調用任意一個對象的方法;生成動态代理。
有時候我們說某個語言具有很強的動态性,有時候我們會區分動态和靜态的不同技術與作法。我們朗朗上口動态綁定(dynamicbinding)、動态鍊接(dynamiclinking)、動态加載(dynamicloading)等。然而“動态”一詞其實沒有絕對而普遍适用的嚴格定義,有時候甚至像對象導向當初被導入編程領域一樣,一人一把号,各吹各的調。
一般而言,開發者社群說到動态語言,大緻認同的一個定義是:“程序運行時,允許改變程序結構或變量類型,這種語言稱為動态語言”。從這個觀點看,Perl,Python,Ruby是動态語言,C++,Java,C#不是動态語言。
盡管在這樣的定義與分類下Java不是動态語言,它卻有着一個非常突出的動态相關機制:Reflection。這個字的意思是“反射、映象、倒影”,用在Java身上指的是我們可以于運行時加載、探知、使用編譯期間完全未知的classes。
換句話說,Java程序可以加載一個運行時才得知名稱的class,獲悉其完整構造(但不包括methods定義),并生成其對象實體、或對其fields設值、或喚起其methods。這種“看透class”的能力(theabilityoftheprogramtoexamineitself)被稱為introspection(内省、内觀、反省)。Reflection和introspection是常被并提的兩個術語。
Java如何能夠做出上述的動态特性呢?這是一個深遠話題,本文對此隻簡單介紹一些概念。整個篇幅最主要還是介紹ReflectionAPIs,也就是讓讀者知道如何探索class的結構、如何對某個“運行時才獲知名稱的class”生成一份實體、為其fields設值、調用其methods。本文将談到java.lang.Class,以及java.lang.reflect中的Method、Field、Constructor等等classes。
Java之父
詹姆斯·戈士林博士以“Java技術之父”聞名于世。他是Java技術的創始人,作為Sun研究院院士,他親手設計了Java語言,完成了Java技術的原始編譯器和虛拟機。
在他的帶領下,Java現已成為互聯網的标準編程模式以及分布式企業級應用的事實标準,其跨平台的技術優勢為網絡計算帶來了劃時代的變革。目前,戈士林博士積極緻力于軟件開發工具的研究,以使軟件開發工具的功能更強大,更容易為開發人員所使用,确保應用、服務開發的迅速完成。
Java技術是Sun公司在1995年5月正式推出的。二十多年來,Java已從編程語言發展成為全球第一大通用開發平台。Java技術已為計算機行業主要公司所采納,同時也被越來越多的國際技術标準化組織所接受。1999年,Sun推出了以Java2平台為核心的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技術這一全球領先技術平台的顯赫地位。
Java反射機制概述
Java反射機制是Java程序在運行狀态下,動态獲取類中的内容以及動态調用對象的方法。此篇是對Java反射機制的一些基礎代碼操作的簡單總結。1Java反射機制概述Java反射機制就是在Java程序運行時,得到一個java類中的屬性和方法;并可以調用已經給定對象的類中的構造方法、屬性和方法。放射機制就是就像這樣動态的獲取類中構造方法、屬性和方法以及動态調用對象的方法。



















