【问题标题】:Query on instance of Class class查询 Class 类的实例
【发布时间】:2014-06-20 06:25:56
【问题描述】:

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

getClass() 方法返回Class 类的实例。

例如:

class Foo{}
class Sample{ class Foo instance = Foo(); Class obj = instance.getClass(); }

获取Class 类实例的另一种方法是说Foo.class

我的问题:

我可以在Object类源代码(File Object.java package java.lang)中看到getClass()的定义。在哪个源文件中,我可以看到我们作为Foo.class使用的成员class吗?

【问题讨论】:

  • 这可能已经回答了.. (stackoverflow.com/questions/10947768/…)
  • 检查其他答案,还有this from the JLS.class 是一个称为类文字的表达式。
  • @Deco 因此,根据 JLS 的给定链接,这是一个语法内容。德科,如果这个重复的问题?
  • @overexchange - 不是真的。 .getClass().class 用于不同的事情。前者在运行时使用,后者在编译时检查。查看链接的问题及其答案。

标签: java class


【解决方案1】:

没有源文件。 class 是关键字(如thisinstanceof 等),不是任何类的成员,由编译器处理,而不是在代码中。

【讨论】:

    【解决方案2】:

    如果一个对象的实例可用,那么获取其类的最简单方法是调用Object.getClass()

    Foo foo=new Foo();
    Class c = foo.getClass();
    

    如果类型可用但没有实例,则可以通过将.class 附加到类型名称来获得类。这也是获取原始类型的 Class 的最简单方法。

    boolean b;
    Class c = boolean.class; 
    

    这会产生编译时错误

    Class c = b.getClass();   
    

    因为布尔值是原始类型,不能被取消引用

    对于这样的事情

    Foo foo=null;
    

    请注意,在这种情况下您不能使用foo.getClass(),因为它没有被实例化。

    最后是这样的

    Foo foo=new FooChild();
    Class c= foo.getClass(); //returns FooChild, evaluates at runtime
    Class c= Foo.class;// returns Foo , evaluates statistically at compile-time.
    

    编辑:- 对于.class,它是每个基本类型中的一个静态字段,static Class<Integer>,代表整数的类实例。你可以在这里看到 Integer ,在这里看到 Boolean。 boolean、byte、char、short、int、long、float 和 double 它们都有一个 Class 静态字段,因为就像我说的那样,它总是保持不变,并且不能取消引用原始类型。要查看源代码,如果您看到 Integer 的源代码,您可以看到 class 字段为 public static final Class<Integer> TYPE = (Class<Integer>) VMClassLoader.getPrimitiveClass('I'); ,请参见 here 第 82 行。您也可以搜索并查看其他人。

    【讨论】:

    • foo.class;这是错误的。顺便说一句,Mandar 指向的链接已经回答了这个问题,但我的问题是别的,我没有问什么时候使用 getClass() 以及什么时候使用类文字?
    • 我已经编辑过,意思是 Foo.class 。还更新了答案以包括对, can i see the member class which we are using as Foo.class 的回答
    猜你喜欢
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多