getClass()public final Class<? extends Object> getClass() 返回一个对象的运行时类。该 Class 对象是由所表示类的 static synchronized 方法锁定的对象。***这句尤其不懂 返回:
表示该对象的运行时类的 java.lang.Class 对象。此结果属于类型 Class<? extends X>,其中 X 表示清除表达式中的静态类型,该表达式调用 getClass。
清除表达式*****这个东东也不懂哪位好心人指点我一下
表示该对象的运行时类的 java.lang.Class 对象。此结果属于类型 Class<? extends X>,其中 X 表示清除表达式中的静态类型,该表达式调用 getClass。
清除表达式*****这个东东也不懂哪位好心人指点我一下
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);
s.getClass
返回的就是一个String类型的对象
该 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<?> 就行了.不知道这么说懂了没有.
但在这里继承限定符没有意义.
//这两句话不太理解~~~ Method method = haha.getClass().getMethod("getName", new Class[] { String.class, String.class, int.class }); //这里后面为什么有三个参数?不太理解
String result = (String) method.invoke(haha, new Object[] { "Bill", "Gates" });
//这、里为什么就变两个参数了?
之前写过的一些代码,没运行过,应该是写错了,理论上应该是以下的样子
String result = (String) method.invoke(haha, new Object[] { "Bill", "Gates",1 });
相当于
String result = haha.getName("Bill","Gates",1)getClass()主要就是用来反射,明白了用途就行,需要的时候用就可以了.
http://blog.csdn.net/justinavril/archive/2008/09/03/2873664.aspx