• java 27


    类 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);
  • 相关阅读:
    shell脚本编程-结构化命令3-while、until命令
    shell脚本编程-结构化命令2-for命令
    sscanf解析复杂字符串,双引号通配符的使用问题
    shell脚本编程-结构化命令1-分支语句
    shell脚本编程基础
    linux系统管理的基本命令2
    linux系统管理的基本命令
    redis
    Eclipse启动报错
    java斗地主发牌源码
  • 原文地址:https://www.cnblogs.com/LZL-student/p/5965991.html
Copyright © 2020-2023  润新知