2012-01-12 62 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

相关问题