java學(xué)習(xí)筆記之反射

1.在java語言中,靜態(tài)的成員變量,普通數(shù)據(jù)類型類等等都是對象,類也是對象,是java.lang.Class類的實例對象,任何一個類都是Class的實例對象,稱為這個類的類類型,這個實例對象有三種表達(dá)方式

(1)Class c1=類名.class ?任何一個類都有一個隱含的靜態(tài)成員變量class

(2)Class c2=類的實例.getClass() ?知道該類的實例對象后用getClass()方法獲取

(3)Class c3=null;

c3=Class.forName("類的全稱");

c1=c2=c3,都代表了這個類的類類型,一個類只可能是Class類的一個實例對象,無論用哪種方法獲取的都是同一個,我們可以通過類的類類型來創(chuàng)建對象實例,比如:

Foo foo=(Foo)c1.newInstance() 得出來的結(jié)果進(jìn)行強制類型轉(zhuǎn)換就可以得到對象實例,但前提是Foo類必須要有無參構(gòu)造方法

2.加載類

(1)c3=Class.forName("類的全稱")不僅僅代表了類的類類型,還代表了動態(tài)加載類,編譯時刻加載類是靜態(tài)加載類,運行時刻是動態(tài)加載類

(2)new創(chuàng)建類是靜態(tài)加載類,在編譯時刻就需要加載所有的可能用到的類,所以任何一個類出現(xiàn)問題都無法編譯成功

(3)動態(tài)加載類在運行時加載,可能用到的類出錯在編譯時不會報錯,只有在用到時才會報錯,但所有可能用到的類必須繼承同一個接口才能方便調(diào)用






3.基本的數(shù)據(jù)類型,void關(guān)鍵字也有類類型

Class c1=int.class;

Class c2=String.class;

Class c3=void.class;

4.方法也是對象,方法對象屬于java.lang.reflect.Method類,一個成員變量就是一個Method類對象

Class c=obj.getClass();

c.getName();//獲取類的名稱

Method[] ms=c.getMethods();//獲取所有的public函數(shù)的方法對象,包括從父類繼承來的

而getDeclaredMethods()獲取的是所有該類自己聲明的方法,不問訪問權(quán)限,但不包括父類繼承來的


5.成員變量也是對象,.成員變量對象屬于java.lang.reflect.Field類,用法與方法對象類似


6.構(gòu)造函數(shù)也是對象,java.lang.Constructor中封裝了構(gòu)造函數(shù)的信息,用法類似:


7.獲取一個方法的信息

首先獲取類的類類型,如:Class c1=類名.class

通過方法名稱和參數(shù)來獲取,如:Method m=c.getMethod("方法名",new Class[]{int.class,int.class})

或Method m=c.getMethod("方法名",int.class,int.class)

方法的反射操作:通過m對象來調(diào)用方法,與用對象實例調(diào)用效果相同,例:

m.invoke(a1,new Object[]{10,20))(a1為對象實例,new Object[]{10,20)為方法參數(shù),沒有可不寫或為空new Object[]{}),效果等同于a1.方法名(10,20),如果有返回值,返回的是Object對象,要進(jìn)行強制類型轉(zhuǎn)換

8.java中反射的操作都是編譯后的操作,而java中集合的泛型,是防止錯誤輸入的,只在編譯階段有效,繞過編譯就無效了,所以編譯之后集合的泛型是去泛型化的,所以繞過編譯可以繞過泛型

最后編輯于
?著作權(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,623評論 18 399
  • 整體Retrofit內(nèi)容如下: 1、Retrofit解析1之前哨站——理解RESTful 2、Retrofit解析...
    隔壁老李頭閱讀 4,793評論 2 12
  • 反射:通過一個class文件對象來使用該class文件中的構(gòu)造方法,成員變量,成員方法。 如何獲取Class類文件...
    紅姑娘閱讀 312評論 0 0
  • 《深入理解Java虛擬機》筆記_第一遍 先取看完這本書(JVM)后必須掌握的部分。 第一部分 走近 Java 從傳...
    xiaogmail閱讀 5,456評論 1 34
  • 今天實在沒心情,但必須寫,因為參加了這個讀寫班!不是說好的藥按自己的心愿不違背自己的心嗎我現(xiàn)在一個字也不想...
    fieldsky閱讀 180評論 0 0

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