注:每一个对象(NEW对象)对应一个Class对象(加载类),不同的CLass对象代表JAVA中不用的数据类型。JAVA中所有的class都会被封装成Class对象。
public static void main(String[] args) throws Exception
{
// Person.class --> Person对象 --> zhangsan
// Class.class --> Class对象(表示一个类型) --> Person.class
Object obj = new Person("zhangsan", 19);
//获得对象的类型有三种方式
/*1.如果拿到了对象
Class clazz = obj.getClass(); //返回class类型的实例对象。
String classname = clazz.getName();
System.out.println(classname);
*/
/*2.如果获得了表示类名的字符串
String classname = "cn.itcast.day9.reflectstudy.Person";
Class clazz = Class.forName(classname);
System.out.println(clazz.getName());
*/
/*3.明确知道要去拿哪种类型的Class对象
Class clazz = Person.class;
System.out.println(clazz.getName());
System.out.println(int.class.getName());
*/
Class clazz = obj.getClass();
/*遍历类的所有属性
Field[] fields = clazz.getDeclaredFields();
for(int i=0; i<fields.length; i++) {
String name = fields[i].getName();
Class type = fields[i].getType();
System.out.println("属性名:" + name + " 属性类型:" + type.getName());
}
*/
/*获得一个属性,访问这个属性
Field field = clazz.getDeclaredField("name");
field.setAccessible(true); //取消了访问检查
field.set(obj, "曾哥");
System.out.println(obj);
Object value = field.get(obj);
System.out.println(value);
*/
/*获得对象的run方法,调一把
Method m = clazz.getDeclaredMethod("run", null);
m.invoke(obj, null);
*/
/*获得类的构造方法,创建类的实例*/
Constructor con = clazz.getConstructor(String.class, int.class);
Object object = con.newInstance("zhangsan", 29);
Person p = (Person) object;
System.out.println(p);
}
原文地址:http://blog.csdn.net/u014600432/article/details/41512945