• 【反射之构造器(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 }
  • 相关阅读:
    9. 如何在控制器或模型中获取当前登录的管理员或登录用户信息
    FastAdmin控制管理员只显示自己添加的数据
    div 隐藏
    使用JavaScript实现Input输入数据后自动计算并实时显示
    thinkphp中在页面怎么格式输出小数和时间
    fastadmin表单提交提示红色OK
    在某个域被使用或改变时,它会改变颜色。【用于提示表单已填充】
    Unix命令行学习
    Ubuntu菜鸟入门(十)—— Flash控件安装
    Ubuntu菜鸟入门(九)—— 支付宝支付控件安装
  • 原文地址:https://www.cnblogs.com/snow1234/p/7219446.html
Copyright © 2020-2023  润新知