一.概念
反射就是把Java的各種成分映射成相應的Java類。
Class類的構造方法是private,由JVM創(chuàng)建。
反射是java語言的一個特性,它允程序在運行時(注意不是編譯的時候)來進行自我檢查并且對內部的成員進行操作。例如它允許一個java的類獲取他所有的成員變量和方法并且顯示出來。Java 的這一能力在實際應用中也許用得不是很多,但是在其它的程序設計語言中根本就不存在這一特性。例如,Pascal、C 或者 C++ 中就沒有辦法在程序中獲得函數(shù)定義相關的信息。 (來自Sun)
JavaBean 是 reflection 的實際應用之一,它能讓一些工具可視化的操作軟件組件。這些工具通過 reflection 動態(tài)的載入并取得 Java 組件(類) 的屬性。
反射是從1.2就有的,后面的三大框架都會用到反射機制,涉及到類"Class",無法直接new CLass(),其對象是內存里的一份字節(jié)碼.
Class 類的實例表示正在運行的 Java 應用程序中的類和接口。枚舉是一種類,注釋是一種接口。每個數(shù)組屬于被映射為 Class 對象的一個類,所有具有相同元素類型和維數(shù)的數(shù)組都共享該 Class 對象。基本的 Java類型(boolean、byte、char、short、int、long、float 和 double)和關鍵字 void 也表示為 Class 對象。Class 沒有公共構造方法。Class 對象是在加載類時由 Java 虛擬機以及通過調用類加載器中的 defineClass 方法自動構造的。
1 Person p1 = new Person();
2 //下面的這三種方式都可以得到字節(jié)碼
3 CLass c1 = Date.class();
4 p1.getClass();
5 //若存在則加載,否則新建,往往使用第三種,類的名字在寫源程序時不需要知道,到運行時再傳遞過來
6 Class.forName(“java.lang.String”);
復制代碼
CLass.forName()字節(jié)碼已經(jīng)加載到java虛擬機中,去得到字節(jié)碼;java虛擬機中還沒有生成字節(jié)碼 用類加載器進行加載,加載的字節(jié)碼緩沖到虛擬機中。
1 import java.lang.reflect.*;
2
3 public class DumpMethods {
4 public static void main(String args[]) {
5 try {
6 Class c = Class.forName(“java.util.Stack”);
7
8 Method m[] = c.getDeclaredMethods();
9
10 for (int i = 0; i < m.length; i++)
11 System.out.println(m[i].toString());
12 }
13 catch (Throwable e){
14 System.err.println(e);
15 }
16 }
17 }
1 public synchronized java.lang.Object java.util.Stack.pop()
2 public java.lang.Object java.util.Stack.push(java.lang.Object)
3 public boolean java.util.Stack.empty()
4 public synchronized java.lang.Object java.util.Stack.peek()
5 public synchronized int java.util.Stack.search(java.lang.Object)
這樣就列出了java.util.Stack 類的各方法名以及它們的限制符和返回類型。這個程序使用 Class.forName 載入指定的類,然后調用 getDeclaredMethods 來獲取這個類中定義了的方法列表。java.lang.reflect.Methods 是用來描述某個類中單個方法的一個類。
以下示例使用 Class 對象來顯示對象的類名:文章來源:http://www.zghlxwxcb.cn/news/detail-460668.html
1 void printClassName(Object obj) {
2 System.out.println("The class of " + obj +
3 " is " + obj.getClass().getName());
4 }
還可以使用一個類字面值(文章來源地址http://www.zghlxwxcb.cn/news/detail-460668.html
到了這里,關于Java反射機制深入詳解的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!