2011-10-17 69 views
9

我在看一些Java代碼,並且有我經常看到的這段代碼。Foo.class它做了什麼?

Foo.class 

這是用來表示類的類型?是類似於

Foo.GetType(); 
typeof(Foo); 

in C#?

它用於什麼?它的意義是什麼?

+1

一些相關信息:'System.Type'是.Net中的一般類型,而不是特定於C#。我不知道JVM中的Class類型是否相同(與Java語言本身相反)。 –

+0

很難找到來自Java的這條信息。我搜索了「C#類對象」,「C#引用類」以及許多不知道這一點的術語在C#中被稱爲「類型」 - 您將得到的唯一內容是OOP的教程和介紹。但是,謝謝你的問題:-) – Mitja

回答

12

是的,Foo.class在Java中相當於C#中的typeof(Foo)。有關類文字的更多信息,請參閱section 15.8.2 of the JLS

一樣上的參考,其獲取執行時間類型的對象的調用GetType()。 Java的等價物是someReference.getClass()

您可能在Java代碼中比在C#中更頻繁地看到它的一個原因是與泛型有關。這不完全是稀奇事是這樣的:

public class Generic<T> 
{ 
    private final Class<T> clazz; 

    public Generic(Class<T> clazz) 
    { 
     this.clazz = clazz; 
    } 
} 

這使得執行時間訪問類反射等,這是隻在Java必要的,因爲類型擦除,泛型類型,其中一個對象可以通常在執行時決定它的類型參數。

+0

真棒。謝謝。 – DarthVader

+0

太棒了。我覺得它有點有趣,他們稱之爲clazz :) – DarthVader

+2

@ user177883:那是一個約定。其他人可能會用不同的名字只是因爲'class'是一個關鍵字。 –

2

java中有特殊的類叫做。它繼承對象。它的實例表示java運行時的類和接口,並且還表示枚舉,數組,原始Java類型(布爾型,字節型,char型,short型,int型,long型,float型,double型)以及關鍵字。當加載一個類時,或者JVM調用類加載器的defineClass()方法時,JVM將創建一個Class對象。

Java允許我們在很多方面創建一個類的相應Class對象, 和.class就是其中之一。 例如

Class c1 = String.class; 
相關問題