Java反射就是把Java的各種成分映射成相應(yīng)的Java類。
Class類的構(gòu)造方法是private,由JVM創(chuàng)建。
反射是java語(yǔ)言的一個(gè)特性,它允程序在運(yùn)行時(shí)(注意不是編譯的時(shí)候)來(lái)進(jìn)行自我檢查并且對(duì)內(nèi)部的成員進(jìn)行操作。例如它允許一個(gè)java的類獲取他所有的成員變量和方法并且顯示出來(lái)。Java 的這一能力在實(shí)際應(yīng)用中也許用得不是很多,但是在其它的程序設(shè)計(jì)語(yǔ)言中根本就不存在這一特性。例如,Pascal、C 或者 C++ 中就沒(méi)有辦法在程序中獲得函數(shù)定義相關(guān)的信息。(來(lái)自Sun)
JavaBean是reflection 的實(shí)際應(yīng)用之一,它能讓一些工具可視化的操作軟件組件。這些工具通過(guò) reflection 動(dòng)態(tài)的載入并取得 Java 組件(類) 的屬性。
反射是從1.2就有的,后面的三大框架都會(huì)用到反射機(jī)制,涉及到類"Class",無(wú)法直接new CLass(),其對(duì)象是內(nèi)存里的一份字節(jié)碼.
Class類的實(shí)例表示正在運(yùn)行的 Java 應(yīng)用程序中的類和接口。枚舉是一種類,注釋是一種接口。每個(gè)數(shù)組屬于被映射為 Class對(duì)象的一個(gè)類,所有具有相同元素類型和維數(shù)的數(shù)組都共享該 Class 對(duì)象。
基本的 Java類型(boolean、byte、char、short、int、long、float 和 double)和關(guān)鍵字 void 也表示為 Class 對(duì)象。Class沒(méi)有公共構(gòu)造方法。
Class對(duì)象是在加載類時(shí)由 Java 虛擬機(jī)以及通過(guò)調(diào)用類加載器中的 defineClass 方法自動(dòng)構(gòu)造的。
Class.forName()字節(jié)碼已經(jīng)加載到j(luò)ava虛擬機(jī)中,去得到字節(jié)碼;java虛擬機(jī)中還沒(méi)有生成字節(jié)碼 用類加載器進(jìn)行加載,加載的字節(jié)碼緩沖到虛擬機(jī)中。