Java 反射機制

通過反射獲取Class & Method

  • 1.獲取Class
   public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        //String類的實例
        String str = new String();
        //String其實也是一個實例對象 它是Class類的實例
        //任何類的Class的實例對象有三種獲取方式

        //第一種 每個類都有一個隱含的靜態成員變量class
        Class c1 = String.class;
        //第二種 通過該類的getClass方法獲取
        Class c2 = str.getClass();
        //第三種 Class.forName()
        Class c3 = Class.forName("java.lang.String");
        System.out.println(c1 == c2 & c2 == c3);

        //c1 c2 c3叫做class type 可以通過類類型創建類的實例
        String st = (String) c1.newInstance();
    }

  • 2.獲取方法
    public static void printClassInfo(Object obj) {
        // 獲取類信息 要先獲取類類型
        Class c = obj.getClass();
        // 獲取類名稱
        System.out.println("c類名稱:" + c.getName());

        /*
         * 獲取類方法 Method類是方法類 getMethods()獲取的是所有public的方法 包括父類繼承而來的
         * getDeclaredMethods()獲取的是該類自己聲明的所有方法 不問訪問權
         */
        Method[] m1 = c.getMethods();
        Method[] m2 = c.getDeclaredMethods();
        for (Method m : m1) {
            // 方法的名稱
            System.out.println("方法的名稱:" + m.getName());
            // 方法的返回類型的類類型
            Class returnType = m.getReturnType();
            System.out.println("返回類型的類類型:" + returnType);
            System.out.println("返回類型的類類型的名字:" + returnType.getName());
            // 獲取參數類型的類類型
            Class[] paramTypes = m.getParameterTypes();
            for (Class p : paramTypes) {
                // 參數的名稱
                System.out.println("參數名:" + p.getName());
            }
        }
    }


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