zoukankan      html  css  js  c++  java
  • 4、获取Class中的构造函数

    4、获取Class中的构造函数

    4.1 早期创建对象

    • 早期创建对象,先根据被new的类的名称找寻该类的字节码文件,并加载进内存,并创建该字节码文件对象,并接着创建该接文件的对应的Person对象
    com.hw.bean.Person p = new com.hw.bean.Person();
    

    4.2 现在创建对象

    • 找寻该名称类文件,并加载进内存,调用newInstance() 创建由此 类对象表示的类的新实例。
    @Test
    public void createNewObject_1() throws Exception {
        // 早期创建对象,先根据被new的类的名称找寻该类的字节码文件,并加载进内存,
        // 并创建该字节码文件对象,并接着创建该接文件的对应的Person对象
        com.hw.bean.Person p = new com.hw.bean.Person();
    
        // 现在
        String name = "com.hw.bean.Person";
        // 找寻该名称类文件,并加载进内存,并产生Class对象
        Class clazz = Class.forName(name);
        // 通过空参构造器获取实例
        Object obj = clazz.newInstance();
    }
    

    • 当获取指定名称对应类中的所体现的对象时,而该对象初始化不是用空参数构造该怎么办呢?
    • 既然是通过指定的构造函数,进行对象的初始化,所以应该先获取到构造函数。

    4.3 获取Class中的构造函数

    4.3.1 getConstructor(类<?>... parameterTypes)
    • 返回一个 Constructor对象,该对象反映 Constructor对象表示的类的指定的公共 类函数。
    • parameterTypes参数是以声明顺序标识构造函数的形式参数类型的类对象的数组。
    • 如果此类对象表示在非静态上下文中声明的内部类,则形式参数类型将显式包围实例作为第一个参数。
    • 反映的构造是这样表示的类的公共构造类对象,其形式参数类型匹配那些由指定的parameterTypes 。
     @Test
    public void createNewObject_2() throws Exception {
        String name = "com.hw.bean.Person";
        Class clazz = Class.forName(name);
        // 获取指定方法参数的构造对象
        Constructor constructor = clazz.getConstructor(String.class, int.class);
        System.out.println(constructor);
        // 通过该构造器对象的newInstance()方法进行对象的初始化
        Object obj = constructor.newInstance("小明", 22);
    }
    

    运行


    本章节源码: ReflectDemo2

  • 相关阅读:
    P2024 [NOI2001]食物链[扩展域并查集]
    poj1733 Parity game[带权并查集or扩展域]
    BZOJ1079 [SCOI2008]着色方案[组合计数DP]
    P1801 黑匣子[对顶堆]
    poj3784 Running Median[对顶堆]
    P1196 [NOI2002]银河英雄传说[带权并查集]
    poj1456 Supermarket[另类的并查集做法]
    P1955 [NOI2015]程序自动分析[离散化+并查集]
    BZOJ1306 [CQOI2009]match循环赛/BZOJ3139 [Hnoi2013]比赛[dfs剪枝+细节题]
    android的模拟器-Genymotion
  • 原文地址:https://www.cnblogs.com/Grand-Jon/p/10041945.html
Copyright © 2011-2022 走看看