2012-06-04 45 views
1

關於類加載的閱讀,http://onjava.com/pub/a/onjava/2005/01/26/classloading.html,碰到 - 「......每當我們編譯任何Java文件時,編譯器都會嵌入一個名爲class的公共static類型的final類型的類型java.lang.Class,在發送的字節碼中由於這個字段是公開的,所以我們可以使用虛線符號來訪問它,如下所示:關於.class字段的思考

java.lang.Class klass = Myclass.class; ..... .......「

我試圖訪問此字段(Myclass.class)使用反射,這是平原瘋了我同意但仍然:),我得到java.lang.NoSuchFieldException:類

Myclass myObject = new Myclass; 
System.out.println(myObject.getclass().getField("class")); 

它是運行時而不是編譯器添加靜態.class字段嗎?即便如此,爲什麼不能通過反射來訪問?

+2

字段名稱是klass和訪問類! –

+0

@bunta編輯問題的清晰度 – meer

+0

只是想知道爲什麼你需要.class從反射時,你已經getClass() – Kshitij

回答

1

這不是字段訪問本身,而是僅僅看起來像字段訪問的Java語言語法的expression。我認爲編譯器可以將這樣一個綜合字段放入類文件中,儘管我不知道其中的一個。

+0

嗯...會更有意義的方式.. thnx。需要閱讀規格,沒有其他的去:) – meer

0

一般來說,Java語言規範說這種形式的表達式必須返回相應的類對象,但它沒有定義如何完成。 Eclipse JDT編譯器實際上並不是一個字段。它創建了一個名爲「$ class」的方法,只要你訪問類似myClass.class的東西就會調用它。