更新時間:2019-08-15 11:23:33 來源:動力節(jié)點 瀏覽3233次
Java反射機制的用途和缺點
反射的用途 Uses of Reflection
反射被廣泛地用于那些需要在運行時檢測或修改程序行為的程序中。這是一個相對高級的特性,只有那些語言基礎非常扎實的開發(fā)者才應該使用它。如果能把這句警示時刻放在心里,那么反射機制就會成為一項強大的技術,可以讓應用程序做一些幾乎不可能做到的事情。
反射的缺點 Drawbacks of Reflection
盡管反射非常強大,但也不能濫用。如果一個功能可以不用反射完成,那么最好就不用。在我們使用反射技術時,下面幾條內(nèi)容應該牢記于心:
1.性能第一 Performance Overhead
反射包括了一些動態(tài)類型,所以 JVM 無法對這些代碼進行優(yōu)化。因此,反射操作的效率要比那些非反射操作低得多。我們應該避免在經(jīng)常被 執(zhí)行的代碼或?qū)π阅芤蠛芨叩某绦蛑惺褂梅瓷洹?/p>
2.安全限制 Security Restrictions
使用反射技術要求程序必須在一個沒有安全限制的環(huán)境中運行。如果一個程序必須在有安全限制的環(huán)境中運行,如 Applet,那么這就是個問題了。
3.內(nèi)部暴露 Exposure of Internals
由于反射允許代碼執(zhí)行一些在正常情況下不被允許的操作(比如訪問私有的屬性和方法),所以使用反射可能會導致意料之外的副作用--代碼有功能上的錯誤,降低可移植性。反射代碼破壞了抽象性,因此當平臺發(fā)生改變的時候,代碼的行為就有可能也隨著變化。