一種是通過默認的構造器通過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); } }