- N +

java反射應用 java反射執行方法

本篇文章給大家談談java反射應用,以及java反射執行方法對應的知識點,文章可能有點長,但是希望大家可以閱讀完,增長自己的知識,最重要的是希望對各位有所幫助,可以解決了您的問題,不要忘了收藏本站喔。

該如何提高使用Java反射的效率

大概有這些方法:

1,緩存要調用的類型、對象實例或方法,減少調用Class.forName、構造對象和getMethod的次數,如使用hashmap來緩存。如果要支持熱部署,需要控制好緩存和版本的關系。

2,在緩存的基礎上,盡量用接口來實現方法調用,而不是使用invoke。

吐槽下,java里沒有委托(函數指針),干這事效率最高的就是使用委托。

Java反射到底慢在哪里

先陳述一下結論:java的反射是慢,但是是相對于直接調用而言,慢也的確慢了一個數量級,不過在有些場景必須使用反射,并且在反射的時候,可以用一些手段進行人工優化

再說一下java反射之所以有一點慢的原因

1.java和python比起來,java是靜態語言類型,也就是說在編譯期java在編譯代碼的時候就會進行類型的強檢驗,java會在編譯期進行代碼優化,而反射是在運行時發生的,也就是說那些類型檢查,代碼優化的事情放在了運行時,這個自然要耗費一點時間

2.編譯期在運行時很難做一些關于反射的優化,現在的編譯期還不是非常智能,知道你用這段反射代碼需要做什么事情

3.再說一下,調用實現過程,在反射調用過程中,執行者叫MethodAccessor,我記得這個對象是懶加載的,也就是說有可能第一次反射調用耗時可能會更長一點,并且在調用的時候method.invoke方法還要對參數數組進行包裝,可能涉及到參數類型適配,裝包拆包也有消耗,其實說到底,還是不知道具體的參數類型

既然Java反射可以訪問和修改私有成員變量,那封裝成private還有意義么

要從不同角度來看待private和反射。

private代表了封裝,是面向對象的體現。而反射是java這門語言的特性之一,為了提供更加靈活和高級的操作。

所以框架一般會用到反射,用于做一些aop等。而我們的業務代碼要面向對象編程,便于復用擴展維護。

換句話說,反射更加底層,底層是不需要oop的。

java反射與依賴注入的關系

事實上Spring的依賴注入就是采用反射機制的。反射是指程序可以訪問、檢測和修改它本身狀態或行為的一種能力。對于Java來說,就是在運行狀態中,查詢這個類、對象的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法、修改它的屬性。而所謂的依賴注入就是指在運行時(不是編譯時)改變對象的屬性或者調用對象的構造方法。

關于java反射應用到此分享完畢,希望能幫助到您。

返回列表
上一篇:
下一篇: