【问题标题】:Is .class a method or field?.class 是方法还是字段?
【发布时间】:2012-01-12 14:24:25
【问题描述】:

java 中的任何类都有 .class ,我想知道 .class 是不是静态方法?或者它是一个公共静态字段?

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

【问题讨论】:

  • 你的问题我已经看了三遍了,我怕是看不懂了。
  • @aix:在 Java 中,所有类(例如,String)都有一个 class literal (.class),它是该类的 Class 实例.例如,String.class == Class.forName("java.lang.String")(禁止类加载器等的边缘情况)。
  • @T.J.Crowder:哦。我以为他在谈论类 files :-)
  • @aix:这不是不合理的想法。 :-)

标签: java class


【解决方案1】:

两者都不是。
它是一种内置的语言特性(类文字),看起来像一个公共静态最终字段。

【讨论】:

【解决方案2】:

当您在类名后写.class 时,它引用代表给定类的Class 对象。 .class 在没有可用的类实例时使用。

例如,如果您的类是Print(建议类名以大写字母开头),则Print.class 是一个对象,表示运行时打印类。它与Print. 的任何(直接)实例的getClass() 方法返回的对象相同

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

【讨论】:

  • 类的实例与表示类类型的对象不同
【解决方案3】:

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

两者都不是。它是在编译时针对该类的 Class 对象评估的表达式。

【讨论】:

  • 第三版(当前)可能是一个更好的链接;它还提供了比第二版更多的细节。
  • 感谢您的链接!。不过,重要的是不是“针对那个类”,因为它可以用于接口、注释等。
猜你喜欢
  • 1970-01-01
  • 2015-06-05
  • 2011-09-28
  • 2017-10-27
  • 2017-02-10
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
相关资源
最近更新 更多