類對象
所有的類都存在一個類對象,這個類對象用于提供類本身的信息,比如都有什么屬性什么方法
在一個JVM中只有一個Classloader,一個Classloader下一種類只有一個類對象
獲取類對象有三種方式
1.Class.forName(classname)
2.Hero.class
3.new Hero().getClass()
獲取類對象時會導致類屬性被初始化
創(chuàng)建對象
反射機制概荷,會先拿到Hero的“類對象”,然后通過類對象獲取“構造器對象” 再通過構造器對象創(chuàng)建一個對象
//使用反射的方式創(chuàng)建對象
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会放,參數(shù)類型是String的方法
Method m = h.getClass().getMethod("setName", String.class);
// 對h對象饲齐,調用這個方法
m.invoke(h, "蓋倫");