2012-01-12 91 views
20

java中的任何類都有一個.class,我想知道.class是一個靜態方法還是不是?或者它是一個公共靜態字段?.class是方法還是字段?

boolean alwaysTrue = (String.class == Class.forName("java.lang.String")); 
+9

任何(直接)實例的getClass()方法返回我已經閱讀並重新閱讀你的問題三次,恐怕我不能作出任何意義的。 – NPE 2012-01-12 14:25:38

+2

@aix:在Java中,所有類(例如'String')都有一個* [class literal](http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#250782) *('.class'),它是該類的['Class'](http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html)實例。例如,'String.class == Class.forName(「java.lang.String」)'(禁止類加載器等邊緣情況)。 – 2012-01-12 14:26:57

+1

@ T.J.Crowder:哦。我以爲他在談論class *文件* :-) – NPE 2012-01-12 14:27:56

回答

30

既不。
這是一個看起來像公共靜態final字段的內置語言功能(類文字)。

+4

具體來說,一個*類字面*:http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#250782 – 2012-01-12 14:31:08

8

當您在類名後面編寫.class時,它會引用代表給定類的Class對象。當沒有可用類的實例時使用.class

例如,如果你的類是Print(建議類名稱以大寫字母開頭),然後Print.class是表示在運行時類打印的對象。這是同一個對象,是由Print.

Print myPrint = new Print(); 
System.out.println(Print.class.getName()); 
System.out.println(myPrint.getClass().getName()); 
+1

類的實例與表示類類型的對象不相同 – Val 2016-04-06 14:41:19

相關問題