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