java反射reflect

Class類

java中類是誰的對象?

類是對象,類是java.lang.Class類的實例對象(there is a class named Class)

表達方式

Class c1 = 類.class;
Class c2 = 實例.getClass();
Class c3 = Class.forName("類的全稱");//會有異常拋出

c1 c2 表示某個類的類類型(class type)

通過類類型創(chuàng)建對象

c2.newInstance();//需要做類型的強制轉(zhuǎn)換,并且類需要有無參數(shù)的構(gòu)造函

動態(tài)加載類

  • 編譯時刻加載的類是靜態(tài)加載類
類 c = new 類();
  • 運行時刻加載的類是動態(tài)加載類
Class c = Class.forName("類的全稱");
c.newInstance();

獲取方法信息

c.getName();//打印類的全稱
c.getSimpleName();//打印類的名稱(不包含包名)

//獲取所有public方法(包括父類中的)
Method[] ms = c.getMethods();
//獲取該類自己聲明的方法不限制訪問權(quán)限
Method[] ms = c.getDeclaredMethods();
//得到方法的返回值類型的類類型
Class returnType = m.getReturnType();
//得到方法的名稱
System.out.println(m.getName());
//獲取參數(shù)類型,得到參數(shù)列表的類型的類類型
Class[] paramTypes = m.getParameterTypes();

獲取成員變量的信息

java.lang.reflect.Field類
該類封裝了關(guān)于成員變量的操作

//獲取所有public的成員變量的信息
Field[] fs = c.getFields();
//獲取所有類中自定義的成員變量的信息
Field[] fs = c.getDeclaredFields();

方法反射的基本操作

如何獲取某個方法?

方法的名稱參數(shù)列表唯一決定一個方法

//獲取public中的方法
c.getMethod(name, parameterTypes);
//獲取類中自定義的方法
c.getDeclaredMethod(name, parameterTypes);
//例子
Method m = c.getMethod("print", new Class[]{int.class,int.class});//會拋出異常
//也可以不用數(shù)組,直接有幾個參數(shù)寫幾個參數(shù)
Method m = c.getMethod("print",int.class,int.class);
//用m來調(diào)用方法,obj是那個對象來調(diào)用這個方法,args是調(diào)用時用的參數(shù),有幾個寫幾個,或者用數(shù)組,和上面一樣
m.invoke(obj, args);

java集合泛型

java中集合的泛型是防止錯誤輸入用的,只會在編譯階段有效,可以用反射的方法繞過編譯,可以在集合中添加不符合集合定義時泛型的數(shù)據(jù)。

無論定義了什么類型的泛型集合,編譯之后都是一樣的,也就是說,他們的類類型是完全一樣的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,628評論 18 399
  • 整體Retrofit內(nèi)容如下: 1、Retrofit解析1之前哨站——理解RESTful 2、Retrofit解析...
    隔壁老李頭閱讀 4,798評論 2 12
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,241評論 0 62
  • 你不是號啕大哭而是嚶嚶啜泣沒有電閃雷鳴作伴也無狂風(fēng)助威你悄無聲息 我行走在你的領(lǐng)地?fù)蝹泔@得多余可禁不住時間的生長待...
    俗然閱讀 258評論 7 16

友情鏈接更多精彩內(nèi)容