黄视频网站在线免费观看-黄视频网站在线看-黄视频网站在线观看-黄视频网站免费看-黄视频网站免费观看-黄视频网站免费

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 什么是反射?及其作用

什么是反射?及其作用

來源:千鋒教育
發布人:qyf
時間: 2022-06-07 15:14:00 1654586040

java培訓

  反射 (Reflection) 是 Java 的特征之一,它允許運行中的 Java 程序獲取自身的信息,并且可以操作類或對象的內部屬性。

  簡而言之,通過反射,我們可以在運行時獲得程序或程序集中每一個類型的成員和成員的信息。程序中一般的對象的類型都是在編譯期就確定下來的,而 Java 反射機制可以動態地創建對象并調用其屬性,這樣的對象的類型在編譯期是未知的。所以我們可以通過反射機制直接創建對象,即使這個對象的類型在編譯期是未知的。

  反射的核心:是 JVM 在運行時才動態加載類或調用方法/訪問屬性,它不需要事先(寫代碼的時候或編譯期)知道運行對象是誰。

  Java 反射主要提供以下功能:

  在運行時判斷任意一個對象所屬的類;

  在運行時構造任意一個類的對象;

  在運行時判斷任意一個類所具有的成員變量和方法(反射甚至可以調用private方法);

  在運行時調用任意一個對象的方法

  重點:是運行時而不是編譯時

  二、反射的主要用途

  很多人都認為反射在實際的 Java 開發應用中并不廣泛,其實不然。當我們在使用 IDE(如 Eclipse,IDEA)時,當我們輸入一個對象或類并想調用它的屬性或方法時,一按點號,編譯器就會自動列出它的屬性或方法,這里就會用到反射。

  反射最重要的用途就是開發各種通用框架。很多框架(比如 Spring)都是配置化的(比如通過 XML 文件配置 Bean),為了保證框架的通用性,它們可能需要根據配置文件加載不同的對象或類,調用不同的方法,這個時候就必須用到反射,運行時動態加載需要加載的對象。

  舉一個例子,在運用 Struts 2 框架的開發中我們一般會在 struts.xml 里去配置 Action,比如:

<action name="login"

               class="org.ScZyhSoft.test.action.SimpleLoginAction"

               method="execute">

           <result>/shop/shop-index.jsp</result>

           <result name="error">login.jsp</result>

       </action>

  配置文件與 Action 建立了一種映射關系,當 View 層發出請求時,請求會被 StrutsPrepareAndExecuteFilter 攔截,然后 StrutsPrepareAndExecuteFilter 會去動態地創建 Action 實例。比如我們請求 login.action,那么 StrutsPrepareAndExecuteFilter就會去解析struts.xml文件,檢索action中name為login的Action,并根據class屬性創建SimpleLoginAction實例,并用invoke方法來調用execute方法,這個過程離不開反射。

  對與框架開發人員來說,反射雖小但作用非常大,它是各種容器實現的核心。而對于一般的開發者來說,不深入框架開發則用反射用的就會少一點,不過了解一下框架的底層機制有助于豐富自己的編程思想,也是很有益的。

  三、反射的基本運用

  上面我們提到了反射可以用于判斷任意對象所屬的類,獲得 Class 對象,構造任意一個對象以及調用一個對象。這里我們介紹一下基本反射功能的使用和實現(反射相關的類一般都在 java.lang.relfect 包里)。

  1、獲得 Class 對象

  方法有三種:

(1) 使用 Class 類的 forName 靜態方法:

1

2

3

4

5

6

7

 public static Class<?> forName(String className)

```

比如在 JDBC 開發中常用此方法加載數據庫驅動:

```java

 Class.forName(driver);

(2)直接獲取某一個對象的 class,比如:

1

2

Class<?> klass = int.class;

Class<?> classInt = Integer.TYPE;

(3)調用某個對象的 getClass() 方法,比如:

1

2

StringBuilder str = new StringBuilder("123");

Class<?> klass = str.getClass();

  2、判斷是否為某個類的實例

  一般地,我們用 instanceof 關鍵字來判斷是否為某個類的實例。同時我們也可以借助反射中 Class 對象的 isInstance() 方法來判斷是否為某個類的實例,它是一個 native 方法:

1

public native boolean isInstance(Object obj);

  3、創建實例

  通過反射來生成對象主要有兩種方式。

  使用Class對象的newInstance()方法來創建Class對象對應類的實例。

1

2

Class<?> c = String.class;

Object str = c.newInstance();

  先通過Class對象獲取指定的Constructor對象,再調用Constructor對象的newInstance()方法來創建實例。這種方法可以用指定的構造器構造類的實例。

1

2

3

4

5

6

7

//獲取String所對應的Class對象

Class<?> c = String.class;

//獲取String類帶一個String參數的構造器

Constructor constructor = c.getConstructor(String.class);

//根據構造器創建實例

Object obj = constructor.newInstance("23333");

System.out.println(obj);

  4、獲取方法

  獲取某個Class對象的方法集合,主要有以下幾個方法:

  getDeclaredMethods 方法返回類或接口聲明的所有方法,包括公共、保護、默認(包)訪問和私有方法,但不包括繼承的方法。

1

public Method[] getDeclaredMethods() throws SecurityException

getMethods 方法返回某個類的所有公用(public)方法,包括其繼承類的公用方法。

1

public Method[] getMethods() throws SecurityException

getMethod 方法返回一個特定的方法,其中第一個參數為方法名稱,后面的參數為方法的參數對應Class的對象。

1

public Method getMethod(String name, Class<?>... parameterTypes)

  5、獲取構造器信息

  獲取類構造器的用法與上述獲取方法的用法類似。主要是通過Class類的getConstructor方法得到Constructor類的一個實例,而Constructor類有一個newInstance方法可以創建一個對象實例:

1

public T newInstance(Object ... initargs)

  此方法可以根據傳入的參數來調用對應的Constructor創建對象實例。

  6、獲取類的成員變量(字段)信息

  主要是這幾個方法,在此不再贅述:

  getFiled:訪問公有的成員變量

  getDeclaredField:所有已聲明的成員變量,但不能得到其父類的成員變量getFileds 和 getDeclaredFields 方法用法同上(參照 Method)。

  7、調用方法

  當我們從類中獲取了一個方法后,我們就可以用 invoke() 方法來調用這個方法。invoke 方法的原型為:

1

2

3

public Object invoke(Object obj, Object... args)

        throws IllegalAccessException, IllegalArgumentException,

           InvocationTargetException

  四、反射的一些注意事項

  由于反射會額外消耗一定的系統資源,因此如果不需要動態地創建一個對象,那么就不需要用反射。另外,反射調用方法時可以忽略權限檢查,因此可能會破壞封裝性而導致安全問題。

  更多關于“java培訓”的問題,歡迎咨詢千鋒教育在線名師。千鋒教育多年辦學,課程大綱緊跟企業需求,更科學更嚴謹,每年培養泛IT人才近2萬人。不論你是零基礎還是想提升,都可以找到適合的班型,千鋒教育隨時歡迎你來試聽。

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
精品国产亚洲人成在线| 久久国产一久久高清| 美女免费毛片| 国产麻豆精品高清在线播放| 国产视频一区二区三区四区| 黄视频网站免费观看| 日韩一级精品视频在线观看| 麻豆午夜视频| 四虎影视精品永久免费网站| 国产高清在线精品一区二区| 香蕉视频久久| 国产成a人片在线观看视频| 日韩avdvd| 亚洲精品影院一区二区| 午夜欧美福利| 天堂网中文字幕| 成人免费网站久久久| 九九热国产视频| 欧美激情一区二区三区中文字幕| 欧美爱爱动态| 中文字幕一区二区三区精彩视频 | 成人高清护士在线播放| 欧美a级大片| 亚洲精品中文字幕久久久久久| 亚洲不卡一区二区三区在线| 日韩免费片| 日本免费乱理伦片在线观看2018| 国产激情视频在线观看| 午夜欧美福利| 成人高清免费| 亚欧成人乱码一区二区| 亚洲不卡一区二区三区在线| 久久成人性色生活片| 国产不卡在线看| 欧美爱爱动态| 国产a视频| 九九久久99| 97视频免费在线| 99久久精品国产高清一区二区 | 人人干人人插| 天天做日日爱| 亚洲第一视频在线播放| 日本免费区| 黄视频网站在线观看| 二级片在线观看| 亚洲爆爽| 日日夜夜婷婷| 亚欧成人乱码一区二区| 日本伦理黄色大片在线观看网站| 欧美激情一区二区三区视频 | 成人高清视频在线观看| 成人免费网站久久久| 99久久精品国产高清一区二区| 日本伦理网站| 精品久久久久久中文字幕一区| 久久国产影视免费精品| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产一区二区精品久久91| 亚洲爆爽| 国产一区二区精品久| 中文字幕97| 国产一区二区精品尤物| 毛片的网站| 国产网站麻豆精品视频| 欧美一级视频免费观看| 国产成人啪精品视频免费软件| 国产激情一区二区三区| 国产不卡在线看| 日本免费区| 欧美一区二区三区在线观看| 日本在线不卡免费视频一区| 日韩在线观看视频黄| 国产高清视频免费观看| 国产亚洲男人的天堂在线观看| 日韩免费在线视频| 午夜精品国产自在现线拍| 青青青草影院| 可以免费看毛片的网站| 国产亚洲免费观看| 国产激情视频在线观看| 成人影院一区二区三区| 青青久久精品| 可以免费看毛片的网站| 久草免费在线色站| 亚洲女人国产香蕉久久精品| 日韩专区一区| 国产一区二区精品在线观看| 日日日夜夜操| 欧美一区二区三区性| 欧美国产日韩精品| 国产视频久久久久| 国产极品白嫩美女在线观看看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 青青青草影院 | 日日夜人人澡人人澡人人看免| 成人高清免费| 国产极品精频在线观看| 成人av在线播放| 成人免费高清视频| 欧美爱爱动态| 精品视频在线观看视频免费视频| 亚洲 欧美 成人日韩| 午夜精品国产自在现线拍| 欧美激情一区二区三区视频高清| 精品国产香蕉在线播出 | 国产网站免费视频| 欧美激情一区二区三区在线| 午夜在线亚洲男人午在线| 精品国产一区二区三区精东影业| 国产激情一区二区三区| 久草免费在线视频| 国产激情一区二区三区| 天天色成人| 午夜久久网| 麻豆网站在线看| 999久久66久6只有精品| 日韩专区在线播放| 久久精品大片| 久久福利影视| 日韩欧美一二三区| 日韩avdvd| 日本在线www| 青草国产在线观看| 精品视频在线观看一区二区| 日韩专区一区| 成人在激情在线视频| 欧美一级视频免费| 精品久久久久久综合网| 亚飞与亚基在线观看| 99久久精品费精品国产一区二区| 国产视频在线免费观看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 亚洲 欧美 91| 日韩专区亚洲综合久久| 成人高清视频在线观看| 成人a级高清视频在线观看| 色综合久久手机在线| 韩国三级视频网站| 久久精品店| 黄视频网站免费观看| 亚欧视频在线| 日韩专区一区| 亚洲精品影院| 成人免费观看的视频黄页| 青青青草影院 | 成人高清免费| 韩国毛片免费| 国产福利免费视频| 免费国产在线视频| 精品国产一区二区三区久| 国产成人精品综合| 韩国三级视频网站| 中文字幕一区二区三区 精品| 欧美爱色| 国产成人女人在线视频观看| 久久国产影视免费精品| 国产综合91天堂亚洲国产| 毛片高清| 麻豆网站在线看| 国产成人精品影视| 你懂的日韩| 成人高清护士在线播放| 国产成人精品综合| 国产视频一区二区三区四区| 久久精品大片| 麻豆网站在线看| 日日日夜夜操| 可以免费看毛片的网站| 国产伦精品一区三区视频| 999久久狠狠免费精品| 日韩欧美一二三区| 成人影院一区二区三区| 精品国产香蕉在线播出 | 日韩中文字幕在线观看视频| 国产成人精品在线| 黄视频网站在线看| 日本乱中文字幕系列| 成人影院久久久久久影院| 久久久成人网| 精品久久久久久中文字幕2017| 亚洲不卡一区二区三区在线| 999精品在线| 欧美国产日韩在线| 高清一级毛片一本到免费观看| 国产一区二区精品尤物| 国产极品白嫩美女在线观看看| 日韩免费在线视频| 国产精品1024永久免费视频| 欧美1区| 欧美激情一区二区三区在线| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产伦精品一区三区视频 | 精品视频在线观看免费| 国产高清在线精品一区a| 欧美爱色| 中文字幕Aⅴ资源网| 99久久精品国产国产毛片| 国产不卡高清在线观看视频| 日韩在线观看免费| 国产精品自拍在线观看|