類 Constructor<T>:提供關於類的單個構造方法的信息以及對它的訪問權限。
通過反射的方法獲取構造方法並使用 ps:先忽略泛型
A.1:獲取構造方法的數組:
public Constructor<?>[] getConstructors():獲得所有公共構造方法
public Constructor<?>[] getDeclaredConstructors():獲得所有構造方法
A.2:獲取單個構造方法(用於非私有的構造方法)
public Constructor<T> getConstructor(Class<?>... parameterTypes)
參數表示的是:你要獲取的構造方法的構造參數個數及數據類型的class字節碼文件對象
A.3:獲取單個構造方法(用於私有的構造方法)
public Constructor<T> getDeclaredtConstructor(Class<?>... parameterTypes)
B.1:初始化構造方法的實例:(用於非私有的構造方法)
public T newInstance(Object... initargs) 注意:T表示的是泛型,Object... initargs表示的是你要實例化的指定參數
使用此 Constructor對象表示的構造方法來創建該構造方法的聲明類的新實例,並用指定的初始化參數初始化該實例。
B.2:初始化構造方法的實例:(用於私有的構造方法)
先用: public void setAccessible(boolean flag):flag的值為 true 則指示反射的對象在使用時應該取消 Java 語言訪問檢查。
再用: public T newInstance(Object... initargs)
代碼:
A:public Constructor<?>[] getConstructors():獲得所有公共構造方法
1 Constructor[] c1 = c.getConstructors(); 2 System.out.println(c1);// 返回的是地址值,證明得到的是個數組對象 3 // 遍歷這個數組 4 for (Constructor ct : c1) { 5 System.out.println(ct); 6 } //獲得Person類中的所有公告構造方法
B:public Constructor<?>[] getDeclaredConstructors():獲得所有構造方法
1 // B:public Constructor<?>[] getDeclaredConstructors():獲得所有構造方法 2 Constructor[] c1 = c.getDeclaredConstructors(); 3 //遍歷數組 4 for(Constructor ct : c1){ 5 System.out.println(ct); 6 } //獲得Person類的所有構造方法
C:public Constructor<T> getConstructor(Class<?>... parameterTypes):獲得指定的構造方法
獲得無參構造方法:
1 Constructor c1 = c.getDeclaredConstructor(); 2 System.out.println(c1);
獲得帶參構造方法:
1 //獲取指定的構造方法,需要該方法的參數列表 2 Constructor c1 = c.getDeclaredConstructor(String.class,int.class,String.class); 3 System.out.println(c1);
D:public T newInstance(Object... initargs) 注意:T表示的是泛型,Object... initargs表示的是你要實例化的指定參數
使用此 Constructor對象表示的構造方法來創建該構造方法的聲明類的新實例,並用指定的初始化參數初始化該實例。
也就是初始化對象
通過反射獲取公共帶參構造方法並使用:
1 //獲取指定的構造方法,需要該方法的參數列表 2 Constructor c1 = c.getDeclaredConstructor(String.class,int.class,String.class); 3 System.out.println(c1); 4 5 // 通過帶參構造方法對象創建對象 6 // public T newInstance(Object... initargs): 7 //有泛型,前面沒使用泛型,先用Objcet 8 Object b = c1.newInstance("張三",13,"家鄉"); 9 System.out.println(b); //Person [name=張三, age=13, address=家鄉]
通過反射獲取私有帶參構造方法並使用:
1 //獲取指定的私有構造方法 2 Constructor c1 = c.getDeclaredConstructor(String.class); 3 4 //public void setAccessible(boolean flag): 5 //flag的值為 true 則指示反射的對象在使用時應該取消 Java 語言訪問檢查。 6 c1.setAccessible(true); 7 8 // public T newInstance(Object... initargs) 9 Object ob = c1.newInstance("張三"); 10 System.out.println(ob);
后兩個代碼,相當於以前的: 只不過通過反射,不需要導入對應的類
1 public Person(String name, int age, String address) 2 3 Person p = new Person("張三",13,"家鄉"); 4 System.out.println(p);
和
1 private Person(String name){} 2 3 Person p = new Person("風清揚"); 4 System.out.println(p);