类对象
所有的类都存在一个类对象,这个类对象用于提供类本身的信息,比如都有什么属性什么方法
在一个JVM中只有一个Classloader,一个Classloader下一种类只有一个类对象
获取类对象有三种方式
1.Class.forName(classname)
2.Hero.class
3.new Hero().getClass()
获取类对象时会导致类属性被初始化
创建对象
反射机制,会先拿到Hero的“类对象”,然后通过类对象获取“构造器对象” 再通过构造器对象创建一个对象
//使用反射的方式创建对象
String className = "charactor.Hero";
//类对象
Class pClass=Class.forName(className);
//构造器
Constructor c= pClass.getConstructor();
//通过构造器实例化
Hero h2= (Hero) c.newInstance();
通过反射机制修改对象的属性
//获取类Hero的名字叫做name的字段
Field f1=
h.getClass().getDeclaredField("name");
//修改这个字段的值
f1.set(h, "teemo");
getField//只能获取public的,包括从父类继承来的字段
getDeclaredField//可以获取本类所有字段,包括private字段但不能获取继承来的字段
(注: 这里只能获取到private的字段,但并不能访问该private字段的值,除非加上setAccessible(true))
通过反射机制调用一个对象的方法
// 获取这个名字叫做setName,参数类型是String的方法
Method m = h.getClass().getMethod("setName", String.class);
// 对h对象,调用这个方法
m.invoke(h, "盖伦");
网友评论