色综合老司机第九色激情 _中文字幕日韩av资源站_国产+人+亚洲_久久久精品影院_久久久视频免费观看_欧美激情亚洲自拍_亚洲成av人片在线观看香蕉_热草久综合在线_欧美极品第一页_2020国产精品自拍

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

手機站
千鋒教育

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

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

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

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

什么是反射?及其作用

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

java培訓

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

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

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

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

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

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

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

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

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

  二、反射的主要用途

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

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

  舉一個例子,在運用 Struts 2 框架的開發(fā)中我們一般會在 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 層發(fā)出請求時,請求會被 StrutsPrepareAndExecuteFilter 攔截,然后 StrutsPrepareAndExecuteFilter 會去動態(tài)地創(chuàng)建 Action 實例。比如我們請求 login.action,那么 StrutsPrepareAndExecuteFilter就會去解析struts.xml文件,檢索action中name為login的Action,并根據class屬性創(chuàng)建SimpleLoginAction實例,并用invoke方法來調用execute方法,這個過程離不開反射。

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

  三、反射的基本運用

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

  1、獲得 Class 對象

  方法有三種:

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

1

2

3

4

5

6

7

 public static Class<?> forName(String className)

```

比如在 JDBC 開發(fā)中常用此方法加載數(shù)據庫驅動:

```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、創(chuàng)建實例

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

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

1

2

Class<?> c = String.class;

Object str = c.newInstance();

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

1

2

3

4

5

6

7

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

Class<?> c = String.class;

//獲取String類帶一個String參數(shù)的構造器

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

//根據構造器創(chuàng)建實例

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 方法返回一個特定的方法,其中第一個參數(shù)為方法名稱,后面的參數(shù)為方法的參數(shù)對應Class的對象。

1

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

  5、獲取構造器信息

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

1

public T newInstance(Object ... initargs)

  此方法可以根據傳入的參數(shù)來調用對應的Constructor創(chuàng)建對象實例。

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

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

  getFiled:訪問公有的成員變量

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

  7、調用方法

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

1

2

3

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

        throws IllegalAccessException, IllegalArgumentException,

           InvocationTargetException

  四、反射的一些注意事項

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

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

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業(yè)內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師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
色综合老司机第九色激情 _中文字幕日韩av资源站_国产+人+亚洲_久久久精品影院_久久久视频免费观看_欧美激情亚洲自拍_亚洲成av人片在线观看香蕉_热草久综合在线_欧美极品第一页_2020国产精品自拍
中文字幕精品在线不卡| 国产伦精品一区二区三区视频青涩 | 日韩欧美亚洲国产另类| 国产精品88av| 中文字幕视频一区二区三区久| 久久精品一区二区三区四区| 日韩中文字幕区一区有砖一区| 国产精品一区2区| 国产日产欧美一区| 91亚洲精华国产精华精华液| 中文字幕中文乱码欧美一区二区| 亚洲综合成人网| 美女高潮久久久| 国产亚洲欧洲997久久综合 | 激情文学综合网| 日韩欧美国产不卡| 91黄色免费观看| 国产精品久久久久久亚洲毛片| 一本色道久久加勒比精品| 色中色一区二区| 国产精品视频一二| 久久精品视频一区二区| 成人免费毛片a| 欧美日本在线看| 国产精品国产三级国产普通话三级 | 国产欧美一区二区在线观看| 午夜精品123| 欧美性感一类影片在线播放| 最新高清无码专区| 亚洲精品在线观看视频| 99久久国产综合色|国产精品| 一区二区高清免费观看影视大全 | 久久丁香综合五月国产三级网站 | 亚洲午夜电影在线观看| 欧美变态口味重另类| 国产精品视频你懂的| 成人av在线观| 亚洲美女免费在线| 亚洲天堂免费看| 国产精品国产精品国产专区不片| 日韩一级免费观看| 欧美高清在线精品一区| 亚洲私人黄色宅男| 亚洲图片欧美视频| 免费人成黄页网站在线一区二区| 蜜芽一区二区三区| 日本午夜精品视频在线观看 | 在线日韩av片| 天堂蜜桃91精品| www久久久久| 欧美日韩精品欧美日韩精品| 91色.com| 亚洲一区视频在线观看视频| 欧美在线免费观看亚洲| 欧美一区二区三区日韩视频| 粉嫩嫩av羞羞动漫久久久| 色欧美乱欧美15图片| 韩国三级中文字幕hd久久精品| 国产一区二区三区在线观看精品| 免费成人美女在线观看| 麻豆精品一区二区三区| 在线观看网站黄不卡| 久久精品人人做人人爽97| 亚洲高清视频中文字幕| 日本精品一区二区三区高清 | 日韩免费电影一区| 九色综合国产一区二区三区| 在线精品视频小说1| 日本一区二区免费在线观看视频 | 国产精品久久久久一区二区三区共| 日韩电影网1区2区| 在线电影院国产精品| www国产亚洲精品久久麻豆| 人妖欧美一区二区| 欧美成人三级电影在线| 国产凹凸在线观看一区二区| 欧美国产一区二区在线观看| 成人福利视频在线看| 一区二区三区蜜桃网| 91精品国产福利在线观看 | 成人免费一区二区三区视频| 色狠狠av一区二区三区| 日韩一区二区三| 亚洲国产精品久久一线不卡| 色狠狠一区二区| 黄页网站大全一区二区| 亚洲综合色噜噜狠狠| 久久综合久久综合九色| 欧美三级视频在线播放| 亚洲高清在线精品| 国产午夜精品福利| 欧美私模裸体表演在线观看| 成人99免费视频| 中文字幕不卡在线观看| 国产色产综合色产在线视频| 国产一区二区三区美女| 美女一区二区视频| 激情综合色播激情啊| 图片区小说区区亚洲影院| 日韩欧美国产麻豆| 久草精品在线观看| 国产中文字幕精品| 国产不卡视频在线观看| 一区二区三区在线观看网站| 91丨九色丨蝌蚪丨老版| 亚洲精品一区二区三区蜜桃下载| 日本不卡免费在线视频| 911精品国产一区二区在线| 亚洲日本在线看| 欧美日本一道本在线视频| 亚洲一区二区三区免费视频| 欧美在线影院一区二区| 一区二区三区日韩在线观看| 91精品国产高清一区二区三区蜜臀 | 欧美午夜片在线看| 免费在线欧美视频| 青青草视频一区| 欧美久久久久久久久中文字幕| 成人免费毛片app| 中文字幕不卡在线| 亚洲自拍另类综合| 成人av网在线| 精品日韩av一区二区| 欧美另类一区二区三区| 国产欧美日韩精品在线| 欧美精品自拍偷拍动漫精品| 欧美一区二区成人| 亚洲成人精品影院| 欧美亚洲动漫精品| 精品国产乱码久久久久久免费| 国产精品久久精品日日| 亚洲国产一区视频| 国产精品久久久久久久久动漫| 欧美一区二区免费观在线| 欧美亚洲动漫另类| 欧美日韩在线亚洲一区蜜芽| 国产成人自拍高清视频在线免费播放| 亚洲一线二线三线久久久| 国产视频一区在线播放| 亚洲少妇30p| 奇米亚洲午夜久久精品| 国产欧美一区视频| 亚洲乱码国产乱码精品精小说 | 欧美撒尿777hd撒尿| 色综合中文字幕国产 | 激情小说欧美图片| 首页国产欧美日韩丝袜| 国产精品国产自产拍高清av| 久久久精品2019中文字幕之3| 综合久久久久久久| 日韩精品一区二区在线| 亚洲国产成人av网| 中文字幕一区二区三区蜜月 | 欧美狂野另类xxxxoooo| 日韩欧美综合在线| 国产精品1区2区| 日韩免费观看高清完整版| 欧美亚洲国产bt| 国产一区二区视频在线| 欧美精品日日鲁夜夜添| 成人av在线播放网址| 午夜精品久久久久久不卡8050| 中文一区在线播放| 欧美日本国产一区| 91免费看`日韩一区二区| 国产精品夜夜嗨| 久久精品国产秦先生| 蜜臀久久99精品久久久久宅男| 一区二区在线观看视频在线观看| 亚洲欧美日韩在线不卡| 中文字幕一区不卡| 中文字幕综合网| 亚洲自拍另类综合| 天天综合天天综合色| 亚洲国产视频一区二区| 亚洲欧洲综合另类| 伊人色综合久久天天| 亚洲综合在线电影| 亚洲精品ww久久久久久p站 | 欧美久久一二区| 欧美精品vⅰdeose4hd| 4438亚洲最大| 精品国产乱码久久久久久夜甘婷婷| 欧美人妖巨大在线| 91精品国产乱| 国产欧美综合色| 亚洲综合成人在线视频| 日韩1区2区日韩1区2区| 狠狠色伊人亚洲综合成人| 国产sm精品调教视频网站| 成人免费的视频| 日本道精品一区二区三区| 欧美日韩午夜影院| 欧美精品一区在线观看| 国产精品丝袜在线| 亚洲国产综合人成综合网站| 久久狠狠亚洲综合| 99精品欧美一区二区三区小说| 欧美乱熟臀69xxxxxx| 中文字幕电影一区|