Java中定义的.class在哪里? (它是变量还是什么?)

时间:2018-01-22 06:40:28

标签: java

有两种获取类Class对象的方法。

  1. 静:

    Class cls = Object.class;
    
  2. 来自一个实例:

    Object ob = new Object();  
    Class cls = ob.getClass();
    
  3. 现在我的问题是getClass()Object类中存在的方法, 但是什么是.class?它是变量吗?如果是这样,那么在Java中定义了什么?

2 个答案:

答案 0 :(得分:9)

这是在内部实现的,并且称为类文字,由JVM处理。

Java语言规范特别为其提及术语“令牌”。

所以.class不仅仅是一个变量,坦白说它根本不是一个变量。在更广泛的层面上,您可以将其视为关键字或令牌

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

  

类文字是一个表达式,包含类,接口,数组或基本类型的名称,或伪类型void后跟“.”和令牌class

     

类文字求值为Class对象的命名类型(或void),由当前实例的类的定义类加载器(第12.2节)定义。

答案 1 :(得分:0)

该信息存在于类'文件中,尽管类不需要在文件系统中具有物理.class文件。 JVM负责从类定义中获取它,正如其他答案所述。

另见: https://docs.oracle.com/javase/specs/jvms/se9/html/jvms-4.html