java反射中調用運行時類的指定結構

一、調用運行時類中指定的結構:屬性

@Test
    public void testField() throws Exception {
        Class clazz = Person.class;

        //創建運行時類的對象
        Person p = (Person) clazz.newInstance();


        //獲取指定的屬性:要求運行時類中屬性聲明爲public
        //通常不採用此方法
        Field id = clazz.getField("id");

        /*
        設置當前屬性的值

        set():參數1:指明設置哪個對象的屬性   參數2:將此屬性值設置爲多少
         */

        id.set(p,1001);

        /*
        獲取當前屬性的值
        get():參數1:獲取哪個對象的當前屬性值
         */
        int pId = (int) id.get(p);
        System.out.println(pId);

    }
/*
    如何操作運行時類中的指定的屬性 -- 需要掌握
     */
    @Test
    public void testField1() throws Exception {
        Class clazz = Person.class;

        //創建運行時類的對象
        Person p = (Person) clazz.newInstance();

        //1. getDeclaredField(String fieldName):獲取運行時類中指定變量名的屬性
        Field name = clazz.getDeclaredField("name");

        //2.保證當前屬性是可訪問的
        name.setAccessible(true);
        //3.獲取、設置指定對象的此屬性值
        name.set(p,"Tom");

        System.out.println(name.get(p));
    }

二、調用運行時類中指定的結構:方法

/*
    如何操作運行時類中的指定的方法 -- 需要掌握
     */
    @Test
    public void testMethod() throws Exception {

        Class clazz = Person.class;

        //創建運行時類的對象
        Person p = (Person) clazz.newInstance();

        /*
        1.獲取指定的某個方法
        getDeclaredMethod():參數1 :指明獲取的方法的名稱  參數2:指明獲取的方法的形參列表
         */
        Method show = clazz.getDeclaredMethod("show", String.class);
        //2.保證當前方法是可訪問的
        show.setAccessible(true);

        /*
        3. 調用方法的invoke():參數1:方法的調用者  參數2:給方法形參賦值的實參
        invoke()的返回值即爲對應類中調用的方法的返回值。
         */
        Object returnValue = show.invoke(p,"CHN"); //String nation = p.show("CHN");
        System.out.println(returnValue);

        System.out.println("*************如何調用靜態方法*****************");

        // private static void showDesc()

        Method showDesc = clazz.getDeclaredMethod("showDesc");
        showDesc.setAccessible(true);
        //如果調用的運行時類中的方法沒有返回值,則此invoke()返回null
//        Object returnVal = showDesc.invoke(null);
        Object returnVal = showDesc.invoke(Person.class);
        System.out.println(returnVal);//null

    }

三、調用運行時類中指定的結構:構造器

/*
    如何調用運行時類中的指定的構造器
     */
    @Test
    public void testConstructor() throws Exception {
        Class clazz = Person.class;

        //private Person(String name)
        /*
        1.獲取指定的構造器
        getDeclaredConstructor():參數:指明構造器的參數列表
         */

        Constructor constructor = clazz.getDeclaredConstructor(String.class);

        //2.保證此構造器是可訪問的
        constructor.setAccessible(true);

        //3.調用此構造器創建運行時類的對象
        Person per = (Person) constructor.newInstance("Tom");
        System.out.println(per);

    }

以上就是java反射中調用運行時類的指定結構的介紹,如果有不當之處或者遇到什麼問題,歡迎在文章下面留言~
如果你想了解更多關於Java的內容,可以查看:Java學習之路
轉載請註明:https://blog.csdn.net/weixin_44662961/article/details/106276411

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