2014-12-19 39 views
0
/* 
* A class for creating object using .class property 
*/ 
class Customer{ 

} 


public class MyApp { 

    public static void main(String[] args) { 

     // Can someone explain how internally it return Class object 
     Class customerClass = Customer.class; 

     System.out.println("Class : " + customerClass); 
    } 
} 
+0

请阅读Java教程[检索类对象](http://docs.oracle.com/javase/tutorial/reflect/class/classNew.html) – 2014-12-19 04:40:54

+0

有什么不明确的。我有明确的书面评论说.. //有人可以解释内部它如何返回类对象 类customerClass = Customer.class; – 2014-12-19 06:39:38

回答

2

使用javap -c MyApp,你会看到的第一个字节码是什么呢:

$ javap -c MyApp 
Compiled from "MyApp.java" 
public class MyApp { 
... 
    public static void main(java.lang.String[]); 
    Code: 
     0: ldc_w   #2     // class Customer 
... 

换句话说,Customer.class被编译为ldc(负载常数)字节码指令,它引用Customer来自常量池的课程。

0

JLS-4.3.2. The Class Object说(部分)

的方法的getClass返回一个表示该对象的类别的类对象。

A Class对象存在于每个参考类型。例如,它可以用于发现类的完全限定名,它的成员,它的直接超类以及它实现的任何接口。

类型的getClass一个方法调用表达式的是Class<? extends |T|>其中T是类或接口搜寻(§15.12.1)为getClass

声明同步的类方法(§8.4.3.6)在与该类的Class对象关联的监视器上同步。