java中的任何類都有一個.class,我想知道.class是一個靜態方法還是不是?或者它是一個公共靜態字段?.class是方法還是字段?
boolean alwaysTrue = (String.class == Class.forName("java.lang.String"));
java中的任何類都有一個.class,我想知道.class是一個靜態方法還是不是?或者它是一個公共靜態字段?.class是方法還是字段?
boolean alwaysTrue = (String.class == Class.forName("java.lang.String"));
既不。
這是一個看起來像公共靜態final字段的內置語言功能(類文字)。
具體來說,一個*類字面*:http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#250782 – 2012-01-12 14:31:08
https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.8.2
既不是。它是在編譯時評估該類的Class
對象的表達式。
Tsk,使用過時的第二版。 ;-) – 2012-01-12 14:31:31
第三個(當前)版本可能是一個更好的鏈接;它還提供了比第二版更多的細節。 – 2012-01-12 14:32:02
夠公平的,我會編輯。 – Viruzzo 2012-01-12 14:44:23
當您在類名後面編寫.class
時,它會引用代表給定類的Class
對象。當沒有可用類的實例時使用.class
。
例如,如果你的類是Print
(建議類名稱以大寫字母開頭),然後Print.class
是表示在運行時類打印的對象。這是同一個對象,是由Print.
Print myPrint = new Print();
System.out.println(Print.class.getName());
System.out.println(myPrint.getClass().getName());
類的實例與表示類類型的對象不相同 – Val 2016-04-06 14:41:19
任何(直接)實例的
getClass()
方法返回我已經閱讀並重新閱讀你的問題三次,恐怕我不能作出任何意義的。 – NPE 2012-01-12 14:25:38@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
@ T.J.Crowder:哦。我以爲他在談論class *文件* :-) – NPE 2012-01-12 14:27:56