一傍念、技術總結:
1苏潜、獲得類:
(1)Class c=Class.forName("classname");
(2)Class c=classname.Class;
(3)classname cn=new classname();
Class c=cn.getClass();
2、獲得構造函數(shù):
(1)獲得所有構造函數(shù):
Constructor[] con=c.getConstructors();//只包含公共的
Constructor[] con=c.getDeclaredConstructors();//包含所有荞彼,包括私有
(2)獲得具體構造函數(shù):
Constructor con=c.getDeclaredConstructor(String.class,int.class);//包含私有
Constructor con=c.getConstructor(String.class,int.class);//只包含公共
(3)實例化構造函數(shù)
Object o=con.newInstance("java",5);//實例化有參構造
Object o=c.newInstance();//實例化無參構造
3骡送、獲得屬性:
(1)獲得所有屬性
Field[] fs=c.getFields();//只包含公共(本類及其父類的)
Field[] fs=v.getDeclaredFields();包含所有
(2)獲得指定屬性
Field f=c.getField("fieldname");//獲得公共的屬性名為fieldname的屬性昂羡,包括其父類
Field f=c.getDeclaredField("fieldname");//獲得當前類屬性名為fieldname的屬性
f.setAccessible(true);//打破封裝,獲得private的屬性
(3)設置屬性
Object o=c.newInstance();
f.set(o,12);//設置c類中屬性f的值為12摔踱;
4虐先、獲得方法
(1)獲得所有方法列表
Method[] ms=c.getMethods();//獲得當前類及其父類所有public方法
Method[] m=c.getDeclaredMethods();//獲得當前類所有方法
(2)獲得指定方法
Method m=c.getMethod("method",String.class);//獲得public類名為method,參數(shù)為String的方法
Method m=c.getDeclaredMethod("method",String.class);//獲得類名為method派敷,參數(shù)為string的方法蛹批,修飾符不限
(3)調用方法
Object o=c.newInstance();
m.invoke(o,"java");//調用類c中的方法m撰洗,傳參String為java。
5腐芍、獲取父類和父接口
Class c=Class.forName("classname");
Class superclass=c.getSuperClass();//獲取父類
Class[] superInterface=c.getInterfaces();//獲取父接口
6差导、獲取修飾符Mofifier.toString(c.getModifier());
二、涉及英文單詞
constructor 構造函數(shù)
method 方法
invoke 調用
parameter 參數(shù)
declared 公然的 公開宣布的
field 領域(屬性)
accessible 易接近的猪勇,可進入的
modifier 修飾語
三设褐、個人見解
首先,在我看來泣刹,反射技術在java中代替了直接引用類的功能络断,可以通過反射技術做到引用類,獲取屬性项玛、構造方法、函數(shù)的所有功能弱判,同時可以更靈活的擴展襟沮,包括動態(tài)的獲取類,而不是后期直接修改class文件昌腰,而是修改配置文件开伏,使得面向對象更加強大、可用遭商。但是同時要面臨的問題是反射技術的使用使得代碼變得模糊固灵,不容易被理解,并且使用反射技術獲取類要比直接引用類要慢十多倍劫流,因此不到萬不得已不能直接使用類巫玻。
在實際編碼中,反射技術在ssh中使用較多祠汇,因此在平時訓練的時候可以多使用反射技術仍秤,在熟悉反射技術代碼、原理的同時為未來框架做準備可很。