反射機制相關的API方法,反射機制api

來源:互聯網
上載者:User

反射機制相關的API方法,反射機制api

JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意一個方法和屬性;這種動態擷取的資訊以及動態調用對象的方法的功能稱為java語言的反射機制。

在android中Google很多的類的某些方法不讓第三方應用去調用,通過java反射機制能把這些隱藏方法擷取出來並調用

相關的API

 1.執行個體化Class對象,有三種方式,        Class.forName(類名全路徑); //通過Class的靜態方法        對象.getClass() //通過對象.getClass方法        int.class //基礎資料型別 (Elementary Data Type)及基礎資料型別 (Elementary Data Type)的封裝了,例如Integer    2.擷取父類        Class<?> clazz  = Class.forName(類名全路徑); //通過Class的靜態方法        Class<?> superclass = clazz.getSuperclass();    3.擷取實現介面        Class<?> clazz  = Class.forName(類名全路徑); //通過Class的靜態方法        Class<?>[] interfaces = clazz.getInterfaces()    4.擷取指定參數建構函式及執行個體化        Class<?> clazz  = Class.forName(類名全路徑); //通過Class的靜態方法        Constructor<?> constructor = clazz.getConstructor(Class<?>  ... class);//擷取公用的        Constructor<?> constructor = clazz.getDeclaredConstructor()//擷取私人的        constructor.newInstance(Object args);    5.擷取所有建構函式及構造參數的類型        Class<?> clazz  = Class.forName(類名全路徑); //通過Class的靜態方法        Constructor<?>[] constructors = clazz.getConstructors();//公用的        Constructor<?>[] constructors = clazz.getDeclaredConstructors()//包括私人的         for (int i = 0; i < constructors.length; i++) {            Class<?> clazzs[] = constructors[i].getParameterTypes();//擷取類型            System.out.print("constructors[" + i + "] (");            for (int j = 0; j < clazzs.length; j++) {                if (j == clazzs.length - 1)                    System.out.print(clazzs[j].getName());                else                    System.out.print(clazzs[j].getName() + ",");            }            System.out.println(")");        }    6.通過無參執行個體化對象        Class<?> clazz  = Class.forName(類名全路徑); //通過Class的靜態方法                  class.newInstance();    7.擷取欄位,修改欄位        Class<?> clazz  = Class.forName(類名全路徑); //通過Class的靜態方法                  Field field = clazz.getField(String name);//擷取公用欄位        Field field = clazz.getDeclaredField(String name);//擷取私人公用欄位        Field[] field = clazz.getFields();//擷取所有公用欄位        Field[] field = clazz.getDeclaredFields();//擷取包括私人所有欄位        Field field = clazz.getDeclaredField("heihei");        field.setAccessible(true);//設定java取消訪問檢查,也就是說如果是私人的也可以訪問,        field.set(obj, "Java反射機制");    8.擷取方法,運行方法        Class<?> clazz  = Class.forName(類名全路徑); //通過Class的靜態方法                  clazz.getMethod(String name ,Class<?> ... parame);//擷取公用指定方法        clazz.getDeclaredMethod(String name ,Class<?> ... parame)//擷取私人指定方法        clazz.getMethods()//擷取公用所有方法        clazz.getDeclaredMethods();//擷取包括私人全部方法        Method method = clazz.getMethod("add");        method.invoke(clazz.newInstance());        method = clazz.getMethod("getInfo", int.class, String.class);        method.setAccessible(true)//設定java取消訪問檢查,也就是說如果是私人的也可以訪問,        method.invoke(clazz.newInstance(), 20, "張三");    9.擷取數組或者list中的類型,如果不是數組或集合返回null        Class<?> clazz  = Class.forName(類名全路徑); //通過Class的靜態方法          Class<?> componentType = clazz.getComponentType();

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.