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 }
  • 相关阅读:
    [转]国内源码下载类网站
    JS 异步处理机制的几种方式(转)
    NodeJS 服务器基本模板
    JS Ajax的error函数(转)
    CSS 文本溢出部分显示省略号
    .net网络编程之一:Socket编程
    在.NET使用JSON作为数据交换格式
    在web.config和app.config文件中增加自定义配置节点
    C#的解题思路(1):不重复随机数的产生问题
    用C#绘制实时曲线图
  • 原文地址:https://www.cnblogs.com/snow1234/p/7219446.html
Copyright © 2011-2022 走看看