zoukankan      html  css  js  c++  java
  • 【反射之构造器(constructor)】

    ■如何获取到.class文件字节码对象:

      使用Class类的静态方法forName()方法,其参数:类名前(Person)必须加上包名(reflect)

     Class<?> personClass = Class.forName("reflect.Person");

    ■获取字节码对象的构造器分为两种:

      第一种:获取所有的构造器,只能获取公有的构造器,而不能获取到私有的构造器

    Constructor<?>[] constructors = personClass.getConstructors();

      第二种:获取字节码的指定构造器,其参数为:传入构造器的参数类型加上“.class”

    Constructor<?> constructor = personClass.getConstructor(String.class, int.class);

    ■如何使用构造器创建对象:

      使用构造器调用newInstance(),传入相应的参数。

    Object p = constructor.newInstance("周娟娟", 23);

    代码:

     1 package reflect_constructor;
     2 
     3 import java.lang.reflect.Constructor;
     4 import java.lang.reflect.InvocationTargetException;
     5 
     6 import reflect.Person;
     7 
     8 public class ConstructorDemo {
     9 
    10     public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
    11         // 使用Class获取.class文件字节码对象。类名前(Person)必须加上包名(reflect)。
    12         Class<?> personClass = Class.forName("reflect.Person");
    13         
    14         // 获取对象的所有构造器(只能获取到公有的,不能获取到私有构造器)
    15         Constructor<?>[] constructors = personClass.getConstructors();
    16         for (Constructor<?> constructor : constructors) {
    17             System.out.println(constructor);
    18         }
    19         
    20         // 使用字节码对象获取指定构造器
    21         Constructor<?> constructor = personClass.getConstructor(String.class, int.class);
    22         System.out.println(constructor);
    23         
    24         // 使用构造器创建实例对象
    25         Object p = constructor.newInstance("周娟娟", 23);
    26         System.out.println(p);
    27     }
    28 
    29 }

     

     1 package reflect;
     2 
     3 public class Person {
     4     
     5     private String name;
     6     private int age;
     7     
     8     public Person() {
     9     }
    10     
    11     private Person(int age) {
    12         
    13     }
    14     
    15     public Person(String name, int age) {
    16         super();
    17         this.name = name;
    18         this.age = age;
    19     }
    20 
    21     public String getName() {
    22         return name;
    23     }
    24 
    25     public void setName(String name) {
    26         this.name = name;
    27     }
    28 
    29     public int getAge() {
    30         return age;
    31     }
    32 
    33     public void setAge(int age) {
    34         this.age = age;
    35     }
    36 
    37     @Override
    38     public String toString() {
    39         return "Person [name=" + name + ", age=" + age + "]";
    40     }
    41 
    42 }
  • 相关阅读:
    JMeter参数签名——Groovy工具类形式
    arthas进阶thread命令视频演示
    疫情期间,如何提高远程办公效率
    Groovy中的闭包
    arthas快速入门视频演示
    绑定手机号性能测试
    基于HTTP请求的多线程实现类--视频讲解
    合格的测试经理必备技能
    Error Code : 1064 You have an error in your SQL syntax; check the manual that corresponds to your My
    Navicat Premium怎么设置字段的唯一性(UNIQUE)?
  • 原文地址:https://www.cnblogs.com/snow1234/p/7219446.html
Copyright © 2011-2022 走看看