• Java反射基础(一)


    构造方法的获取

      1. 四个方法:getConstructors()获取所有的构造方法;

                        getConstructor(parameters)获取匹配参数的构造方法;

                        getDeclaredConstructors()仅获取类中所有真正的构造方法,不包括从父类继承的构造方法;

                        getDeclaredConstructor(parameters)仅获取类中匹配参数的所有真正的构造方法,不包括从父类继承的构造方法。

      2. 对于构造方法中参数为可变参数的情况,当调用getDeclaredConstructor(parameters)时,parameters应该是数组类型的Class对象

          例如 String[].class

      3. 关于嵌套类的构造方法的调用

          需要区分静态和非静态嵌套类两种情况,静态情况下,和一般的调用方法一样,非静态情况下则比较特殊。

       (1)静态嵌套类

     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 }

         

  • 相关阅读:
    打印机连接向导
    字符串替换
    登入脚本统一公司桌面
    判断文件是否存在
    DOS系统变量
    修改文件访问权限
    【CF1017C】The Phone Number(构造)
    【CF1017B】The Bits(模拟)
    【CF1017A】The Rank(签到)
    【CF1016B】Segment Occurrences(模拟)
  • 原文地址:https://www.cnblogs.com/njust-ycc/p/6780932.html
Copyright © 2020-2023  润新知