getClass()public final Class<? extends Object> getClass()    返回一个对象的运行时类。该 Class 对象是由所表示类的 static synchronized 方法锁定的对象。***这句尤其不懂    返回:
        表示该对象的运行时类的 java.lang.Class 对象。此结果属于类型 Class<? extends X>,其中 X 表示清除表达式中的静态类型,该表达式调用 getClass。
清除表达式*****这个东东也不懂哪位好心人指点我一下

解决方案 »

  1.   

    就是返回一个Class类,这个Class类包含原对象的运行信息或构造信息,Class可以看成是对原对象的一个"说明", 究竟原对象内有些什么东西? 我们可以通过Class找到,比如最常见: 
    this.getClass().getMethods() 可以返回这个对象的所有方法  
    this.getClass().getConstructors() 可以返回这个对象的所有构造函数
    this.getClass().getDeclaredFields() 可以返回这个对象的成员变量
    等等.
    在java的反射机制中,经常会用到Class这个类.
    Class classe Class.forName("com.Test")
    Constructor[] con = classe.getConstructors();
    Test test = (Test) con[0].newInstance(); //这样实例化一个Test类. 这里的构造函数不带参数,如果带参数可以通过con[0].getParameterTypes取得参数信息;例子2: 用反射方法运行haha对象的getName方法, 实际上相当于 haha.getName(参数), 如果对代码不懂可以查看文档.
           Haha haha = new Haha();
            Method method = haha.getClass().getMethod("getName", new Class[] { String.class, String.class, int.class }); 
            String result = (String) method.invoke(haha, new Object[] { "Bill", "Gates" });
            System.out.println(result);
      

  2.   

    比如说你现在 String s = new String();
    s.getClass
    返回的就是一个String类型的对象
      

  3.   

    第一句:
    该 Class 对象是由所表示类的 static synchronized 方法锁定的对象就是
    简单说这个Class 就是static synchronized 方法竞争的标记,因为class AClass{
         static synchronized  Tyep|void m(){
          //语句
         }
    }
    在本质上就是:
    class AClass{
         static Type|void m(){
              synchronized(AClass.class){
                  //语句
              }
         }
    }所以说"该 Class 对象是由所表示类的 static synchronized 方法锁定的对象"第二句,翻译的狗屁.
    原意是:Class <?> getClass() 实际上是从Class <? extends X> getClass()这个(泛型)表达式删除(不是擦除)得来的.
    简单说在获取Class对象时,Class <? extends X>和Class <?>在意义上是一致的.假设Data可以被继承,那么Data d = new ChildData();Class<? extends Data> c = d.getCalss();
    不可能返回ChildData的Class对象,因为静态字段反回的是句柄的类型的字段而不是实例的字段.
    所以Class<? extends Data>这个表达式在这里没有意义.直接Class<?> 就行了.不知道这么说懂了没有.
      

  4.   

    Class <? extends Data> c = d.getCalss(); 不可能返回Data的Class,始终返回的是当前实例的Class,getClass并不是static方法.
    但在这里继承限定符没有意义.
      

  5.   


    //这两句话不太理解~~~  Method method = haha.getClass().getMethod("getName", new Class[] { String.class, String.class, int.class });   //这里后面为什么有三个参数?不太理解
            String result = (String) method.invoke(haha, new Object[] { "Bill", "Gates" }); 
    //这、里为什么就变两个参数了?
      

  6.   

    看看jvm运行时的类装载机制,理解一下jvm的运行就能看懂了
      

  7.   


    之前写过的一些代码,没运行过,应该是写错了,理论上应该是以下的样子
    String result = (String) method.invoke(haha, new Object[] { "Bill", "Gates",1 });  
    相当于
    String result = haha.getName("Bill","Gates",1)getClass()主要就是用来反射,明白了用途就行,需要的时候用就可以了.
      

  8.   

    看看我的这篇blog吧  讲得还算详细:
    http://blog.csdn.net/justinavril/archive/2008/09/03/2873664.aspx
      

  9.   

    getClass() 返回该对象所属类的类型信息  每个类多有对应的Class,这个Class存取的是类的相关信息,比如字段,方法之类的各种信息,这些信息是可以通过反射获取出来的