2014-12-19 36 views
0
/* 
* A class for creating object using .class property 
*/ 
class Customer{ 

} 


public class MyApp { 

    public static void main(String[] args) { 

     // Can someone explain how internally it return Class object 
     Class customerClass = Customer.class; 

     System.out.println("Class : " + customerClass); 
    } 
} 
+0

請閱讀Java教程[檢索類對象](http://docs.oracle.com/javase/tutorial/reflect/class/classNew.html) – 2014-12-19 04:40:54

+0

有什麼不明確的。我有明確的書面評論說.. //有人可以解釋內部它如何返回類對象 類customerClass = Customer.class; – 2014-12-19 06:39:38

回答

2

使用javap -c MyApp,你會看到的第一個字節碼是什麼呢:

$ javap -c MyApp 
Compiled from "MyApp.java" 
public class MyApp { 
... 
    public static void main(java.lang.String[]); 
    Code: 
     0: ldc_w   #2     // class Customer 
... 

換句話說,Customer.class被編譯爲ldc(負載常數)字節碼指令,它引用Customer來自常量池的課程。

0

JLS-4.3.2. The Class Object說(部分)

的方法的getClass返回一個表示該對象的類別的類對象。

A Class對象存在於每個參考類型。例如,它可以用於發現類的完全限定名,它的成員,它的直接超類以及它實現的任何接口。

類型的getClass一個方法調用表達式的是Class<? extends |T|>其中T是類或接口搜尋(§15.12.1)爲getClass

聲明同步的類方法(§8.4.3.6)在與該類的Class對象關聯的監視器上同步。