反射動態的創建對象的兩種方式


一種是通過默認的構造器通過Class的newInstance()方法來獲取

另一種是通過指定的構造器來創建

import java.lang.reflect.Constructor;

public class ReflectDemo2 {

    public static void main(String[] args) throws Exception {
        
        /*
         * 如何根據給定名稱獲取到指定的Class對象后建立該類的對象呢?
         */
        
//        getObject_1(); //通過默認構造器new對象
        
//        getObject_2(); //通過指定構造器new對象
        
    }

    public static void getObject_2() throws Exception {
        
        String className = "cn.qujianlei.domain.Person";
        Class clazz = Class.forName(className);
        
        /*
         * 萬一給定類中沒有空參數的構造方法呢?
         * 可以先獲取指定的構造方法,再通過該構造方法進行實例化
         */
        
        //1.通過Class獲取指定構造方法,比如帶兩個參數
        Constructor cons =clazz.getConstructor(String.class,int.class);//拿的是公有的
        
//        System.out.println(cons);
        
        //2.通過指定的構造器對象進行對象的初始化。
        Object obj = cons.newInstance("lisisi",23);
    }

    public static void getObject_1() throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        
        //1.根據給定的類名獲取Class對象。
        String className = "cn.qujianlei.domain.Person";
        Class clazz = Class.forName(className);
        Object obj = clazz.newInstance();//創建了一個Person對象,默認調用該類的空參數構造方法
        //記住:一般被反射的類通常都有空參數的構造方法。
        //java.lang.InstantiationException  沒有調用到與之對應的構造方法
        
        
    }

}

 

public class Person {
        
    private String name;
    private int age;
    public Person(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    
    public Person() {
        super();
        System.out.println("person run");
        
    }
    
    public void show(){
        System.out.println("person show run");
    }
    
    public static void staticShow(){
        System.out.println("person static show run");
    }
    
    public void paramShow(String name,int age){
        System.out.println("show:"+name+"---"+age);
    }
    
    
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM