2010-03-18 38 views

回答

19

一個是實例方法,所以它返回特定對象的類,另一個是類常量(即已知的編譯時)。

Class n = Number.class; 
Number o = 1; 
o.getClass() // returns Integer.class 
o = BigDecimal.ZERO; 
o.getClass(); // returns BigDecimal.class 

這兩種情況都返回Class對象的實例,它描述了一個特定的Java類。對於同一個類,它們返回相同的實例(每個類只有一個Class對象)。

第三種方式來獲得類對象將是

Class n = Class.forName("java.lang.Number"); 

請記住,接口也有類對象(如上面的號碼)。

另外,MyClass.class是超類Class類的公共屬性嗎?

這是一個語言關鍵字。

+1

你的意思是由一個「類常量」?當您分配「Class n = Number.class;」時n的價值是什麼? – Mocha 2010-03-18 06:52:03

+1

n獲取了一個Class的實例,該對象描述了Number「class」(實際上是一個接口)。 – Thilo 2010-03-18 06:56:49

4

MyClass沒有靜態getClass方法,換句話說,您不能調用MyClass.getClass(),而是需要調用(new MyClass())。getClass()才能使其工作。

getClass()將返回一個MyClass.class對象。換句話說,MyClass.class是結果對象,而getClass()是一種方法。該的getClass()方法是在你不知道實際的類對象的情況下非常有用,例如:

 

public void someMethod(Object o) { 
    if(o.getClass().equals(Set.class)) { 
     // The object is a set 
    } else if(o.getClass().equals(List.class)) { 
    // The object is a List 
    } 
} 
 

注意上面的代碼示例可能不是最好的,我只是想展示如何使用它。同樣的功能可以用if(o instanceof Set) { ...}

5

.getClass()返回運行時類的對象,所以它可以當你改變類的變量

.class,另一方面總是返回的類常量進行修改來實現「類型」

注意
如果運行時類恰好是相同類型的類,都將是平等的。 例子:

Long x = new Long(2); 
Class c1 = Long.class; 
Class c2 = x.getClass(); 

//c1==c2 
+0

」,另一方面的.class總是返回的類常量‘類型’? - >這是什麼意思 – Mocha 2010-03-18 06:54:40

+1

@Mocha'Long'是一種類型,'新長征(2)'是該類型的新對象 – MBO 2010-03-18 07:07:35

1
What's the difference between calling MyClass.class and MyClass.getClass() 

所有問題的標題首先是有點誤導! .getClass() is a method defined in java.lang.Object因此,java中的任何對象都可以在類中調用它,因爲.class在類本身上被調用(如公共靜態變量)。所以問題應該是(堅持對Java命名約定)現在

What's the difference between calling MyClass.class and myClassObject.getClass() 

實際差異

.getClass()是在java.lang.Object中本地Java方法。此方法將返回對應於其調用對象的runtime class的java.lang.Class對象。所以

Test t = new TestSubClass(); 
    Class c2 = t.getClass(); 
    System.out.println(c2); 

將打印class TestSubClass

這裏爲的.class將返回靜態評估(在編譯時已知)類。它實際上是Class對象對應的引用類型,指向實際object.So

Test t = new TestSubClass(); 
    Class c2 = Test.class; 
    System.out.println(c2); 

將打印class Test

相關問題