java 反射加載類的對象

  1. 創建java project,建包package cn.itcast.reflect,在包裏創建Person類:
package cn.itcast.reflect;

public class Person {
    public Person(){//無參構造函數
        System.out.println("Hello");
    }

    public Person(String name){//public 有參構造函數
        System.out.println("Hello"+name);
    }


    private Person(int k){//private 有參構造函數
        System.out.println("Hello"+k);
    }

}
  1. 在包package cn.itcast.reflect中建Demo測試類
package cn.itcast.reflect;

import java.lang.reflect.Constructor;

public class Demo {
    /*加載類字節碼,通過反射創建類的對象*/
    public static void main(String args[]) throws Exception{
        /*通過無參構造函數加載Person類
         * 1.得到cn.itcast.reflect.Person對應的class對象
         * Class clazz=Class.forName("cn.itcast.reflect.Person");
         * 2.得到clazz類的所有構造方法,此處clazz代表Person類
        Constructor con=clazz.getConstructor();
         * 3. 根據構造函數new一個實例對象
        Person per=(Person) con.newInstance();
        */

        /*
         * 通過有參構造函數加載Person類
         * Class clazz=Class.forName("cn.itcast.reflect.Person");
        Constructor con=clazz.getConstructor(String.class);  //構造函數參數爲String類型
        Person per=(Person) con.newInstance("sun");
        */

        Class clazz=Class.forName("cn.itcast.reflect.Person");
        Constructor con=clazz.getDeclaredConstructor(int.class);//構造函數參數爲int類型
        con.setAccessible(true);//強制要求可訪問私有構造函數
        Person per=(Person) con.newInstance(666);

    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章