欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java反射機(jī)制Reflection詳解

 更新時(shí)間:2019年04月04日 08:36:30   投稿:laozhang  
在本篇文章里小編給大家分享了關(guān)于java反射機(jī)制Reflection的相關(guān)知識點(diǎn),需要的朋友們學(xué)習(xí)下。

Java語言有好些個(gè)名詞,讓人望而生畏。

上智不教即知,下愚雖教無益,中庸之人,不教不知。

人的天性中就有一點(diǎn)對未知的恐懼。

剛開始不了解,也沒認(rèn)真看,發(fā)現(xiàn)好難呀;等,靜下心來自己研究,再看其實(shí)不難,發(fā)現(xiàn)都是紙老虎,不堪一擊。

今天就來分析一下反射:Reflection 

看一下維基百科的解釋:

在諸如Java之類的面向?qū)ο蟮某绦蛟O(shè)計(jì)語言中,反射允許在程序運(yùn)行期間訪問 類、接口、字段和方法,而不必在編譯期間知道接口、字段或者方法的名稱。

反射也允許實(shí)例化對象和調(diào)用方法。

總結(jié)三點(diǎn):

第一:反射可以獲取類、接口、字段和方法的信息。

第二:不止new可以創(chuàng)建對象,反射也可以實(shí)例化對象。

第三:通過反射實(shí)現(xiàn)對方法的調(diào)用。

對于創(chuàng)建對象或者調(diào)用方法:正常的步驟是先用new關(guān)鍵詞,造一個(gè)對象,然后再使用此對象的引用去調(diào)用方法,這是正常的套路。

反射就是不按正常套路來,但是殊途同歸,本來可以一步到位的東西,他要分幾個(gè)詳細(xì)的步驟或者繞個(gè)彎走。而他的先獲取Class類對象,再去創(chuàng)建對象仿佛就是分步走。

然后通過Class類對象獲取Method,然后通過Method的invoke方法調(diào)用對象的方法就是在繞個(gè)彎。

首先要?jiǎng)?chuàng)建一個(gè)Reflection測試類

使用反射創(chuàng)建對象,用new創(chuàng)建對象就沒必要再說了。JavaAPI為反射機(jī)制提供了一些類包括Class和java.lang.reflect包下的類。

(1)第一種方式:使用Class類的forName靜態(tài)方法,可以獲取一個(gè)類對象,然后調(diào)用類對象的newInstance方法創(chuàng)建對象。

(2)第二種方式:直接使用類名.class獲取類對象,然后調(diào)用類對象的newInstance方法創(chuàng)建對象。

使用反射,獲取類的public方法,并嘗試調(diào)用類的方法。

(1)首先通過反射獲取類對象,通過類對象的getMethods方法,獲取類的所有public方法Method[]。

Method是java.lang.reflect包下的類:提供某個(gè) 類、接口 的單一方法信息,提供對方法的訪問。這個(gè)反射方法可以獲取類方法或者實(shí)例方法。

循環(huán)輸出方法名,可以看到,不止test1、3還有equals、hashCode等繼承Object的方法。

但是并沒有test2,因?yàn)樗皇莗ublic類型的方法。

(2)使用Method的invoke調(diào)用方法test1和hashCode

(3)也可以使用getMethod獲取Method,不過要注意其參數(shù)

第一個(gè)參數(shù):方法名

第二個(gè)參數(shù):此方法參數(shù)的類型集合

使用反射,獲取類的public字段,和獲取方法類似,也有兩個(gè)方法,一個(gè)是獲取所有的public字段,另一個(gè)是獲取某個(gè)public字段

使用反射,獲取類和方法的注解。(Retention(RetentionPolicy.RUNTIME),RUNTIME類型的才能獲取到)

(1)獲取類的注解

(2)獲取方法的注解

相關(guān)文章

  • java實(shí)現(xiàn)新浪微博Oauth接口發(fā)送圖片和文字的方法

    java實(shí)現(xiàn)新浪微博Oauth接口發(fā)送圖片和文字的方法

    這篇文章主要介紹了java實(shí)現(xiàn)新浪微博Oauth接口發(fā)送圖片和文字的方法,涉及java調(diào)用新浪微博Oauth接口的使用技巧,具有一定參考接借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • java中@SuppressWarnings注解用法詳解

    java中@SuppressWarnings注解用法詳解

    這篇文章主要介紹了java中@SuppressWarnings注解用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Spring context:component-scan的使用及說明

    Spring context:component-scan的使用及說明

    這篇文章主要介紹了Spring context:component-scan的使用及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • SpringBoot集成Redis數(shù)據(jù)庫,實(shí)現(xiàn)緩存管理

    SpringBoot集成Redis數(shù)據(jù)庫,實(shí)現(xiàn)緩存管理

    SpringBoot2 版本,支持的組件越來越豐富,對Redis的支持不僅僅是擴(kuò)展了API,更是替換掉底層Jedis的依賴,換成Lettuce。 本案例需要本地安裝一臺Redis數(shù)據(jù)庫。下面就來看下集成Redis的步驟
    2021-06-06
  • Java持久層框架Mybatis入門詳細(xì)教程

    Java持久層框架Mybatis入門詳細(xì)教程

    Mybatis持久層框架支持自定義SQL、存儲過程以及高級映射,可以通過XML或注解來配置和映射原始類型、接口和Java POJOs為數(shù)據(jù)庫中的記錄,接下來通過本文給大家介紹Java持久層框架Mybatis入門詳細(xì)教程,一起學(xué)習(xí)下吧
    2021-06-06
  • springboot單獨(dú)在指定地方輸出sql的方法

    springboot單獨(dú)在指定地方輸出sql的方法

    一般線上項(xiàng)目都是將日志進(jìn)行關(guān)閉,因?yàn)閙ybatis日志打印,時(shí)間長了,會占用大量的內(nèi)存,如果我想在我指定的地方進(jìn)行打印sql情況,本文就給大家介紹了springboot單獨(dú)在指定地方輸出sql的方法,需要的朋友可以參考下
    2023-10-10
  • 使用maven一步一步構(gòu)建spring mvc項(xiàng)目(圖文詳解)

    使用maven一步一步構(gòu)建spring mvc項(xiàng)目(圖文詳解)

    這篇文章主要介紹了詳解使用maven一步一步構(gòu)建spring mvc項(xiàng)目,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • Java 接口和抽象類的區(qū)別詳解

    Java 接口和抽象類的區(qū)別詳解

    在面向?qū)ο缶幊讨校橄箢惡徒涌谑莾蓚€(gè)經(jīng)常被用到的語法概念,是面向?qū)ο笏拇筇匦?,以及很多設(shè)計(jì)模式、設(shè)計(jì)思想、設(shè)計(jì)原則編程實(shí)現(xiàn)的基礎(chǔ)。本文將主要講解二者的區(qū)別
    2021-05-05
  • 詳解Java實(shí)現(xiàn)負(fù)載均衡的幾種算法代碼

    詳解Java實(shí)現(xiàn)負(fù)載均衡的幾種算法代碼

    本篇文章主要介紹了詳解Java實(shí)現(xiàn)負(fù)載均衡的幾種算法代碼 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • 一文帶你你搞懂Java的3種IO模型

    一文帶你你搞懂Java的3種IO模型

    在Java中,一共有三種IO模型,分別是阻塞IO(BIO)、非阻塞IO(NIO)和異步IO(AIO),本文將給大家詳解的介紹這三種IO模型,文中有相關(guān)的代碼示例,需要的朋友可以參考下
    2023-05-05

最新評論