一、java
package reflectionZ; import java.lang.reflect.Constructor; import java.lang.reflect.Type; public class Tzz02 { public static void main(String[] args) throws Exception { // getConstructors() / getConstructor(...) Class<?> clazz1 = Class.forName("reflectionZ.Cat"); // 一、使用的是 默認的 構造函數 Object obj01 = clazz1.newInstance(); // 二、經過Class對象來獲得構造函數 Constructor<?> c1 = clazz1.getConstructor(Class.forName("java.lang.String"), int.class); Object obj0201 = c1.newInstance("小貓", 6); // 強轉 Constructor<?> c2 = clazz1.getConstructor(String[].class); String[] foods = {"魚", "老鼠"}; Object obj0202 = (Cat)c2.newInstance((Object)foods); // 對象數組foods會被打散 if (obj01.getClass() == clazz1) System.out.println("obj01.getClass() == clazz1"); else System.out.println("obj01.getClass() != clazz1"); if (obj0201.getClass() == clazz1) System.out.println("obj01.getClass() == clazz1"); else System.out.println("obj01.getClass() != clazz1"); if (obj0202.getClass() == clazz1) System.out.println("obj01.getClass() == clazz1"); else System.out.println("obj01.getClass() != clazz1"); // *** *** *** System.out.println(); int iIdx = 0; Constructor<?>[] constructors = clazz1.getConstructors(); for (Constructor<?> constructor :constructors) { Type[] types = constructor.getGenericParameterTypes(); if (types.length == 0) System.out.println("["+iIdx+"] ==> 無參構造函數"); else { System.out.println("["+iIdx+"] ==> "+types.length+"個參數的 構造函數,參數的類型分別爲:"); for (Type type : types) { System.out.println(type); } } System.out.println(); iIdx ++; } } } class Cat { public Cat() {} public Cat(String _strName, int _iAge) { System.out.println("Cat --> _strName : "+_strName+" , _iAge : "+_iAge); } public Cat(String[] _foods) { if (_foods == null) System.out.println("Cat --> _foods is null ."); else { for (int i=0; i<_foods.length; i++) System.out.println("Cat --> _foods["+i+"] : "+_foods[i]); } } }
二、數組
控制檯輸出:函數
Cat --> _strName : 小貓 , _iAge : 6
Cat --> _foods[0] : 魚
Cat --> _foods[1] : 老鼠
obj01.getClass() == clazz1
obj01.getClass() == clazz1
obj01.getClass() == clazz1
[0] ==> 無參構造函數
[1] ==> 2個參數的 構造函數,參數的類型分別爲:
class java.lang.String
int
[2] ==> 1個參數的 構造函數,參數的類型分別爲:
class [Ljava.lang.String;
三、spa