最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java反射機制詳解

 更新時間:2022年09月20日 10:49:20   作者:Array_new  
Java的反射機制是在運行狀態(tài)中,對于任何一個類,都可以知道這個類的所有屬性和方法,對于任何一個對象,都可以調(diào)用它所有的方法和屬性,修改部分類型信息,這種動態(tài)獲取信息以及動態(tài)調(diào)用對象方法的功能稱為Java的反射機制

什么是反射?

反射是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法和屬性;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為 Java 語言的反射機制。

哪里用到反射機制

JDBC中,利用反射動態(tài)加載了數(shù)據(jù)庫驅(qū)動程序。

Web服務(wù)器中利用反射調(diào)用了Sevlet的服務(wù)方法。

Eclispe等開發(fā)工具利用反射動態(tài)刨析對象的類型與結(jié)構(gòu),動態(tài)提示對象的屬性和方法。

很多框架都用到反射機制,注入屬性,調(diào)用方法,如Spring。

動態(tài)代理是什么

有哪些應(yīng)用?

動態(tài)代理是運行時動態(tài)生成代理類。

動態(tài)代理的應(yīng)用有 Spring AOP數(shù)據(jù)查詢、測試框架的后端 mock、rpc,Java注解對象獲取等。

怎么實現(xiàn)動態(tài)代理

JDK 原生動態(tài)代理和 cglib 動態(tài)代理。

JDK 原生動態(tài)代理是基于接口實現(xiàn)的,而 cglib 是基于繼承當前類的子類實現(xiàn)的。

Java反射機制的作用

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

在運行時構(gòu)造任意一個類的對象

在運行時判斷任意一個類所具有的成員變量和方法

在運行時調(diào)用任意一個對象的方法

Java 反射機制的優(yōu)缺點

優(yōu)點:

  • 能夠運行時動態(tài)獲取類的實例,大大提高系統(tǒng)的靈活性和擴展性。
  • 與 Java 動態(tài)編譯相結(jié)合,可以實現(xiàn)無比強大的功能。
  • 對于 Java 這種先編譯再運行的語言,能夠讓我們很方便的創(chuàng)建靈活的代碼,這些代碼可以在運行時裝配,無需在組件之間進行源代碼的鏈接,更加容易實現(xiàn)面向?qū)ο蟆?/li>

缺點:

  • 反射會消耗一定的系統(tǒng)資源,因此,如果不需要動態(tài)地創(chuàng)建一個對象,那么就不需要用反射;
  • 反射調(diào)用方法時可以忽略權(quán)限檢查,獲取這個類的私有方法和屬性,因此可能會破壞類的封裝性而導(dǎo)致安全問題。

如何使用Java的反射

通過一個全限類名創(chuàng)建一個對象

Class.forName(“全限類名”); 例如:com.mysql.jdbc.Driver Driver類已經(jīng)被加載到 jvm中,并且完成了類的初始化工作就行了

類名.class; 獲取Class<?> clz 對象

對象.getClass();

獲取構(gòu)造器對象,通過構(gòu)造器new出一個對象

Clazz.getConstructor([String.class]);

Con.newInstance([參數(shù)]);

通過class對象創(chuàng)建一個實例對象(就相當與new類名()無參構(gòu)造器)

Cls.newInstance();

通過class對象獲得一個屬性對象

Field c=cls.getFields():獲得某個類的所有的公共(public)的字段,包括父類中的字段。

Field c=cls.getDeclaredFields():獲得某個類的所有聲明的字段,即包括public、private和proteced,但是不包括父類的聲明字段

通過class對象獲得一個方法對象

Cls.getMethod(“方法名”,class……parameaType);(只能獲取公共的)

Cls.getDeclareMethod(“方法名”);(獲取任意修飾的方法,不能執(zhí)行私有)

M.setAccessible(true);(讓私有的方法可以執(zhí)行)

讓方法執(zhí)行

Method.invoke(obj實例對象,obj可變參數(shù));-----(是有返回值的)

//測試類
public class Demo {
    public String name;
    public void inputAndoutput {
        BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(System.out));
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String aa;
        while ( !(aa= br.readLine()).equals("bye")){
            bufferedWriter.write(aa);
            bufferedWriter.newLine();
            bufferedWriter.flush();
        }
        br.close();
        bufferedWriter.close();
    }
    public Demo(){
    }
    public void print(){
    	System.out.println(this.name);
    }
    public void reverseWords(String s) {
    	System.out.println(s);
		return s;
    }
}
//利用反射
  Class c=new Demo().getClass();
        System.out.println(c.toString());
        Class[] classes=c.getClasses();
        for (Class ca:classes){
            System.out.println(ca.toString());
        }
        Arrays.stream(c.getFields()).forEach(s->{
            System.out.println(s.toString());
        });

到此這篇關(guān)于Java反射機制詳解的文章就介紹到這了,更多相關(guān)Java反射內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java一致性Hash算法的實現(xiàn)詳解

    Java一致性Hash算法的實現(xiàn)詳解

    這篇文章主要介紹了Java一致性Hash算法的實現(xiàn)詳解,hash的意思是散列,目的將一組輸入的數(shù)據(jù)均勻的分開、打散,往往用來配合路由算法做負載均衡,多用在分布式系統(tǒng)中,需要的朋友可以參考下
    2024-01-01
  • idea創(chuàng)建javaweb原生項目的實現(xiàn)示例

    idea創(chuàng)建javaweb原生項目的實現(xiàn)示例

    這篇文章主要介紹了idea創(chuàng)建javaweb原生項目的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • 詳解Java如何優(yōu)雅的實現(xiàn)異常捕獲

    詳解Java如何優(yōu)雅的實現(xiàn)異常捕獲

    在一個優(yōu)秀的項目中一定少不了對程序流程良好的異常捕獲與日志打印,所以本文主要為大家介紹了如何優(yōu)雅的實現(xiàn)異常捕獲與日志打印輸出,有需要的可以參考下
    2023-09-09
  • 服務(wù)器CPU高居不下,JAVA線程占用排查方式

    服務(wù)器CPU高居不下,JAVA線程占用排查方式

    這篇文章主要介紹了服務(wù)器CPU高居不下,JAVA線程占用排查方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • SpringBoot整合Netty+Websocket實現(xiàn)消息推送的示例代碼

    SpringBoot整合Netty+Websocket實現(xiàn)消息推送的示例代碼

    WebSocket使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允許服務(wù)端主動向客戶端推送數(shù)據(jù),本文主要介紹了SpringBoot整合Netty+Websocket實現(xiàn)消息推送的示例代碼,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • spring boot教程之產(chǎn)生的背景及其優(yōu)勢

    spring boot教程之產(chǎn)生的背景及其優(yōu)勢

    這篇文章主要介紹了spring boot教程之產(chǎn)生的背景及其優(yōu)勢的相關(guān)資料,需要的朋友可以參考下
    2022-08-08
  • SpringApplicationRunListener監(jiān)聽器源碼詳解

    SpringApplicationRunListener監(jiān)聽器源碼詳解

    這篇文章主要介紹了SpringApplicationRunListener監(jiān)聽器源碼詳解,springboot提供了兩個類SpringApplicationRunListeners、SpringApplicationRunListener(EventPublishingRunListener),spring框架還提供了一個ApplicationListener接口,需要的朋友可以參考下
    2023-11-11
  • springboot詳解實現(xiàn)車險理賠信息管理系統(tǒng)代碼

    springboot詳解實現(xiàn)車險理賠信息管理系統(tǒng)代碼

    本系統(tǒng)基于Springboot開發(fā)實現(xiàn)了一個為用戶車險進行理賠信息管理的一個信息化管理系統(tǒng),核心的業(yè)務(wù)主要是用戶申請保險理賠,管理員審核進入理賠程序,事故調(diào)查員對事故進行調(diào)查和現(xiàn)場勘察,這其中共涉及到三類用戶,購買保險的客戶,事故調(diào)查員和系統(tǒng)管理員
    2022-06-06
  • Java實現(xiàn)Excel導(dǎo)入導(dǎo)出操作詳解

    Java實現(xiàn)Excel導(dǎo)入導(dǎo)出操作詳解

    在平常的辦公工作中,導(dǎo)入導(dǎo)出excel數(shù)據(jù)是常見的需求,今天就來看一下通過Java如何來實現(xiàn)這個功能,感興趣的朋友可以了解下
    2022-02-02
  • Freemaker Replace函數(shù)的正則表達式運用

    Freemaker Replace函數(shù)的正則表達式運用

    這篇文章主要介紹了Freemaker Replace函數(shù)的正則表達式運用 的相關(guān)資料,需要的朋友可以參考下
    2015-12-12

最新評論

中超| 蚌埠市| 饶平县| 石门县| 贡嘎县| 乐亭县| 景东| 买车| 凉城县| 十堰市| 广丰县| 子洲县| 崇明县| 永济市| 晋城| 房山区| 靖安县| 克东县| 东光县| 凤冈县| 安塞县| 德昌县| 农安县| 乐业县| 奎屯市| 常州市| 定州市| 永康市| 枞阳县| 宜城市| 闽清县| 天等县| 海伦市| 奉节县| 孝义市| 曲松县| 罗平县| 朝阳市| 芜湖市| 宜丰县| 淮北市|