2012-01-12 2 views
20

Любой класс в java имеет .class, я хочу знать .class - статический метод или нет? Или это публичное статическое поле?Является ли класс классом или полем?

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

Я прочитал и перечитал свой вопрос три раза, и я боюсь, что я не могу сделать какой-то смысл из этого. – NPE

+2

@aix: В Java все классы (например, 'String') имеют * [класс литерала] (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 ")' (запрет краевых случаев вокруг загрузчиков классов и т. Д.). –

+1

@ T.J.Crowder: Oh. Я думал, что он говорит о файлах класса * :-) – NPE

ответ

30

Не имеет значения.
Это встроенная функция языка (литерал класса), который выглядит как публичное статическое конечное поле.

+4

В частности, * class literal *: http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#250782 –

4

https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.8.2

Это ни. Это выражение, вычисляемое во время компиляции, для объекта Class для этого класса.

+0

Tsk, используя устаревшее второе издание. ;-) –

+0

Третье (текущее) издание, вероятно, является лучшей ссылкой; он также предоставляет более подробную информацию, чем 2-е изд. –

+0

Достаточно честно, я отредактирую. – Viruzzo

8

Когда вы пишете .class после имени класса, он ссылается на объект Class, который представляет данный класс. .class используется, когда нет экземпляра класса.

Например, если ваш класс равен Print (рекомендуется, чтобы название класса начиналось с прописной буквы), то Print.class - это объект, который представляет класс Print во время выполнения. Это тот же самый объект, который возвращается в getClass() методе любого (прямой) экземпляра Print.

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

экземпляр класса не совпадает с объектом, представляющим тип класса – Val

Смежные вопросы