JAVA之反射學習2-獲取構造方法並使用

qq_42265608發表於2020-12-01
  1. 步驟:
    1.獲取類的物件
    2.獲取所需要的構造方法
    3.將方法例項化(newInstance)並使用
  2. 方法
    1.Constructor<?>[] getConstructors​()返回所有公共建構函式方法的陣列
    2.Constructor<?>[] getDeclaredConstructors​()返回所有建構函式的陣列
    3.Constructor getConstructor​(Class<?>… parameterTypes)返回單個公共建構函式
    4.Constructor getDeclaredConstructor​(Class<?>返回單個指定建構函式
    總結:加declare為全部,不加為公共;
  3. 程式碼
package com.itheima_03;

import com.itheima_02.Student;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

/*
    反射獲取構造方法並使用
 */
public class ReflectDemo01 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
        //獲取Class物件
        Class<?> c = Class.forName("com.itheima_02.Student");

        //Constructor<?>[] getConstructors​() 返回一個包含 Constructor物件的陣列, Constructor物件反映了由該 Class物件表示的類的所有公共建構函式
//        Constructor<?>[] cons = c.getConstructors();
        //Constructor<?>[] getDeclaredConstructors​() 返回反映由該 Class物件表示的類宣告的所有建構函式的 Constructor物件的陣列
        Constructor<?>[] cons = c.getDeclaredConstructors();
        for(Constructor con : cons) {
            System.out.println(con);
        }
        System.out.println("--------");

        //Constructor<T> getConstructor​(Class<?>... parameterTypes) 返回一個 Constructor物件,該物件反映由該 Class物件表示的類的指定公共建構函式
        //Constructor<T> getDeclaredConstructor​(Class<?>... parameterTypes) 返回一個 Constructor物件,該物件反映由此 Class物件表示的類或介面的指定建構函式
        //引數:你要獲取的構造方法的引數的個數和資料型別對應的位元組碼檔案物件

        Constructor<?> con = c.getConstructor();

        //Constructor提供了一個類的單個建構函式的資訊和訪問許可權
        //T newInstance​(Object... initargs) 使用由此 Constructor物件表示的建構函式,使用指定的初始化引數來建立和初始化建構函式的宣告類的新例項
        //instance例子 即例項化
        Object obj = con.newInstance();
        System.out.println(obj);

//        Student s = new Student();
//        System.out.println(s);
    }
}
  1. 例項
  Class<?> c = Class.forName("com.itheima_02.Student");
        Constructor<?> con = c.getDeclaredConstructor(String.class,int.class,String.class);
        Object obj = con.newInstance("阿giao",30,"山西");
        System.out.println(obj);

相關文章