4

Class c1 = Car.class;这是什么.class?它是每个类中都存在的公共变量吗?

4

3 回答 3

5

语法与访问静态字段的.class语法相同,但它实际上不是静态字段;这是一个特殊的语言功能。它类似于数组的length属性,就像一个字段一样被访问,但实际上并没有作为一个字段存储。

要查看差异,请考虑以下示例类:

class Test {
  public static Class<Test> myClass = Test.class;
}

运行javap Test

class Test {
  public static java.lang.Class<Test> myClass;
  Test();
  static {};
}

如您所见,Test.myClass由于我们自己声明它,它被存储为静态字段,但Test.class由于它实际上并未存储为静态字段而没有显示。

于 2013-04-17T02:43:32.767 回答
4

这是获取相应Class对象的特殊语法。class是一个关键字,所以不,没有称为“类”的属性,它只是一个类似于属性访问的语法快捷方式。就像是

Class.forName("Car")

除了它不会抛出异常。

于 2013-04-17T02:42:38.730 回答
3

Java 中的每个对象都属于某个类。这就是为什么由所有其他类继承的 Object 类定义 getClass() 方法的原因。

getClass(), 或 class-literal -Foo.class返回一个 Class 对象,其中包含有关该类的一些元数据:

  • 姓名
  • 包裹
  • 方法
  • 字段
  • 构造函数
  • 注释

以及一些有用的方法,如强制转换和各种检查(isAbstract()、isPrimitive() 等)。javadoc准确地显示了您可以获得哪些关于类的信息。

它指向Class一个类名的实例。如果你有同一个类的对象,你也可以使用

Class c1 = Class.forName("Car");
于 2013-04-17T02:46:28.230 回答