/*所謂的反射機制就是 在壹個類中調用另壹個類裏面的方法和屬性等,另壹個類可能還沒有定義好,但是
* 只要知道他裏面有方法,就可以調用;調用那個類就要現獲得哪個類的完整名字,在創建壹個那個類的壹個對象
* 如果是調用無參的,實例化對象以後就可以書出了
* 但是如果是有參數的構造,就需要getDeclaredConstructor()方法得到壹個相對應的構造函數,放到Constructor的壹個變量裏面
* 然後,在創建壹個Object對象實例化有剛才得到的構造函數,最後在輸出
使用反射機制:
調用無參構造器實例華 House對象;
調用有參數構造起實例華House對象;
調用toString方法
*/
public class ReflectTestPro {
public static void main(String[] args) throws Exception {
Class c = Class.forName("chap06.House");//路徑
// new House();
// 調用無參構造器實例華 House對象;
Object h1 = c.newInstance();// 多態表現 父類和子類
System.out.println(h1);
// 調用無參構造器實例華 ArrayList對象;
Class c1 = Class.forName("java.util.ArrayList");// 類名要完整
Object h2 = c1.newInstance();// 相當於new ArrayList();
System.out.println(h2);
// 調用有參數構造起實例華House對象;
Constructor cons = c.getDeclaredConstructor(new Class[] { String.class,
String.class, double.class });//可其構造函數裏面的參數類型壹定要壹致
Object h3 = cons.newInstance(new Object[] { "shanghai", "3-2-1",
new Double(100.0) });//實例化這個類的壹個實例
// 相當於常規方式中的new House("shanghai///,"3-2-1",100)
System.out.println(h3);
// 調用有參構造器實例華 Date對象
Class c4 = Class.forName("java.util.Date");
Constructor cons4 = c4.getDeclaredConstructor(new Class[] { long.class });
Object h4 = cons4.newInstance(new Object[] { new Long(999999l) });
System.out.println(h4);
// 調用toString方
Method m = c.getDeclaredMethod("toString", new Class[] {});
String s = (String) m.invoke(h3, new Object[] {});// Stirng
// s=h3.toString();
System.out.println(s);
}
}