菜鸟问个初级问题:JAVA的类名为什么都能点出class?这个是从哪里来的?

解决方案 »

  1.   

    楼主指的是什么?   是指编译成字节码后 XXClass.class?
      

  2.   

    是的,编译后在别的类里直接可以点class
      

  3.   

    我查了文档,Object里也没有class这个属性啊
      

  4.   

    类的运行时类对象,通过类名都可以直接得到,通过对象的getClass方法也可以得到这个对象。
      

  5.   

    还是不太清楚楼主的意思参考一下public final Class<?> getClass()
      

  6.   


    public class Test{
        public static void main(String[] args) {
            Class objectClass=Object.class; 
            Object d=new Object();
            Class objectClass2=d.getClass();
            if(objectClass==objectClass){
                System.out.println(true);
            }
        }
    }
      

  7.   

    我就不明白这个class在这里是关键字还是属性?
      

  8.   

    这里可以认为是Object类的一个属性,从Class objectClass=Object.class;从可以看的出来.而且它和Class objectClass2=d.getClass();得到的结果是同一个对象.所有类都有这个属性.
      

  9.   

    getClass()这个方法Object有,但文档中没发现Object有class这个属性,class来自哪?
      

  10.   

    基本明白了,谢谢这位大哥了!我觉得sun在JDK文档中应该注明下这个class的来历就好了
      

  11.   

    getClass
    public final Class<?> getClass()返回此 Object 的运行时类。返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。 
    这里说的这个对象就是那个class
      

  12.   


    在源码中是否是  private String class ;?
      

  13.   

    不是
    源码中没有,而且getClass也是native的,估计要自己去看native方法的C++代码了.
      

  14.   

    明白了,谢谢!我还个javascript的问题等下发到J2EE麻烦在帮看下!再次感谢!
      

  15.   

    类名.class=该类的对象.getClass()
    getClass()返回Class类型,至于什么是Class类型呢?
    这是虚拟机里面运行所限定的,"类名.class"在编译的时候规定死了
    其实,如果你建立个class包,系统会默认错误,为什么?因为命名空间,例如:com.class,通过编译器(也就是JVM处理)会默认com.class是Class的一个实例(对象)