Java反射基礎(一)

構造方法的獲取java

  1. 四個方法:getConstructors()獲取全部的構造方法;數組

                    getConstructor(parameters)獲取匹配參數的構造方法;this

                    getDeclaredConstructors()僅獲取類中全部真正的構造方法,不包括從父類繼承的構造方法;spa

                    getDeclaredConstructor(parameters)僅獲取類中匹配參數的全部真正的構造方法,不包括從父類繼承的構造方法。code

  2. 對於構造方法中參數爲可變參數的狀況,當調用getDeclaredConstructor(parameters)時,parameters應該是數組類型的Class對象對象

      例如 String[].classblog

  3. 關於嵌套類的構造方法的調用繼承

      須要區分靜態和非靜態嵌套類兩種狀況,靜態狀況下,和通常的調用方法同樣,非靜態狀況下則比較特殊。get

   (1)靜態嵌套類io

 1 package jichu;
 2 
 3 import java.lang.reflect.Constructor;
 4 
 5 /**
 6  *@author 做者  Yu chenchen
 7  *@version 建立時間:2017年4月28日 上午11:05:33 
 8  *類說明:
 9  */
10 public class TestReflection {
11     
12     public TestReflection(){
13         
14     }
15     public TestReflection(String str) {
16         // TODO Auto-generated constructor stub
17     }
18     
19     //靜態嵌套類
20     static class NestedClass{
21          public NestedClass(int i) {
22             // TODO Auto-generated constructor stub
23         }
24     }
25     
26     public void test() throws Exception{
27         Constructor<TestReflection> constructor = TestReflection.class.getDeclaredConstructor(String.class);
28         constructor.newInstance("ycc");
29         //獲取靜態嵌套類的構造方法
30         Constructor<NestedClass> constructor2 = NestedClass.class.getConstructor(int.class);
31         constructor2.newInstance(11);
32         
33     }
34     public static void main(String[] args) {
35         try {
36             new TestReflection().test();
37         } catch (Exception e) {
38             // TODO Auto-generated catch block
39             e.printStackTrace();
40         }
41 
42     }
43 
44 }

 

    (2)非靜態嵌套類

     對於非靜態嵌套類來講,它的對象實例中有一個隱含的指向外部類對象的引用,靠這個引用能夠訪問外部類對象的私有域和方法,所以在獲取非靜態嵌套類的構造方法時,類型參數列表的第一個參數必須爲外部類的Class對象。在獲取到構造方法以後,調用newInstance()方法時,第一個參數應該爲外部類對象的引用this,與調用getDeclaredConstructor()方法的第一個參數對應。    

 1 package jichu;
 2 
 3 import java.lang.reflect.Constructor;
 4 
 5 /**
 6  *@author 做者  Yu chenchen
 7  *@version 建立時間:2017年4月28日 上午11:05:33 
 8  *類說明:
 9  */
10 public class TestReflection {
11     
12     public TestReflection(){
13         
14     }
15     public TestReflection(String str) {
16         // TODO Auto-generated constructor stub
17     }
18     
19     //非靜態嵌套類
20     class NestedClass{
21          public NestedClass(int i) {
22             // TODO Auto-generated constructor stub
23         }
24     }
25     
26     public void test() throws Exception{
27         Constructor<TestReflection> constructor = TestReflection.class.getDeclaredConstructor(String.class);
28         constructor.newInstance("ycc");
29         //獲取非靜態嵌套類的構造方法
30         Constructor<NestedClass> constructor2 = NestedClass.class.getConstructor(TestReflection.class,int.class);
31         constructor2.newInstance(this,11);
32         //或者
33         constructor2.newInstance(TestReflection.this,11);
34         
35     }
36     public static void main(String[] args) {
37         try {
38             new TestReflection().test();
39         } catch (Exception e) {
40             // TODO Auto-generated catch block
41             e.printStackTrace();
42         }
43 
44     }
45 
46 }
相關文章
相關標籤/搜索