java-day01-reflect-Constructor

(1)通过反射获得构造方法并使用

通过反射的方法获取构造方法并使用  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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值