java.lang.reflect.Constructor


java.lang.reflect.Constructor

一、Constructor類是什么
  Constructor是一個類,位於java.lang.reflect包下。
  在Java反射中 Constructor類描述的是 類的構造方法信息,通俗來講 有一個類如下:

 1 package com.testReflect;
 2 public class ConstructorDemo {
 3     private int num;
 4     private String str;
 5     
 6     public ConstructorDemo(){
 7         num = 2;
 8         str = "xixi";
 9     }
10     
11     public ConstructorDemo(int num,String str){
12         this.num = num;
13         this.str = str;
14     }
15 
16     @Override
17     public String toString() {
18         return "ConstructorDemo [num=" + num + ", str=" + str + "]";
19     }
20 }

  在Java反射中ConstructorDemo類中的構造方法ConstructorDemo()、ConstructorDemo(int num,String str)都是Constructor類的實例,這個Constructor類的實例描述了構造方法的全部信息。(包括:方法修飾符、方法名稱、參數列表 等等)

二、如何獲取Constructor類對象
  一共有4種方法,全部都在Class類中:
    - getConstructors():獲取類中的公共方法
    - getConstructor(Class[] params): 獲取類的特定構造方法,params參數指定構造方法的參數類型
    - getDeclaredConstructors(): 獲取類中所有的構造方法(public、protected、default、private)
    - getDeclaredConstructor(Class[] params): 獲取類的特定構造方法,params參數指定構造方法的參數類型

三、Constructor類中常用的方法
  對於構造方法,我們就是用來創建類的實例的,但是在Java反射中需要注意的是:默認構造函數和帶參數的構造方法創建實例的區別。

 1 package com.testReflect;
 2 
 3 import java.lang.reflect.Constructor;
 4 import java.lang.reflect.Modifier;
 5 
 6 public class ConstructorTest {
 7     public static void main(String[] args) throws Exception {
 8         //使用反射第一步:獲取操作類ConstructorDemo所對應的Class對象
 9         Class<?> cls = Class.forName("com.testReflect.ConstructorDemo");
10         
11         //獲取默認的構造函數
12         Constructor constructor1 = cls.getConstructor(new Class[]{});
13         //獲取構造函數信息
14         System.out.println("修飾符: "+Modifier.toString(constructor1.getModifiers()));
15         System.out.println("構造函數名: "+constructor1.getName());
16         System.out.println("參數列表: "+constructor1.getParameterTypes());
17         //通過默認的構造函數創建ConstructorDemo類的實例
18         Object obj = constructor1.newInstance();
19         System.out.println("調用默認構造函數生成實例:"+obj.toString());
20         
21         System.out.println("===============================================");
22         
23         //獲取帶參數的構造函數
24         Constructor constructor2 = cls.getConstructor(new Class[]{int.class,String.class});
25         System.out.println("修飾符: "+Modifier.toString(constructor2.getModifiers()));
26         System.out.println("構造函數名: "+constructor2.getName());
27         System.out.println("參數列表: "+constructor2.getParameterTypes());
28         //獲取構造函數信息
29         //通過帶參數的構造函數創建ConstructorDemo類的實例
30         Object obj2 = constructor2.newInstance(new Object[]{33,"haha"});
31         System.out.println("調用帶參數構造函數生成實例:"+obj2.toString());
32     }
33 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM