1. 程式人生 > >java的反射機制的好處

java的反射機制的好處

rac mysql class 加載驅動 什麽 容器 註意 for 結構

java中反射是在運行中動態的加載進入。有個很大的好處就是可以節省很多資源。為什麽這麽說呢,首先我們來說一下jvm,jvm是java的虛擬機,java之所以支持跨平臺就是因為java虛擬機的存在。程序你有如下語句 Object o=new Object();運行起來的時候,java的虛擬機會首先啟動。將你的java文件編譯成 .class文件。加載進入你jvm的內存之中。你的類Object會加載進入方法區,這時候會生成個類的類型對象(即class類的對象)加載到堆中,作為方法區類的數據結構的接口。jvm創建對象時會看你的類是否加載好,加載好了便生成你的類的對象。然而在大型工程項目中,有很多可能暫時用不到,所以我們沒必要把每一個類都生成對象。而反射機制正是解決這了這個問題。

舉個例子我們的項目底層有時是用mysql,有時用oracle,需要動態地根據實際情況加載驅動類,這個時候反射就有用了,假設 com.java.dbtest.myqlConnection,com.java.dbtest.oracleConnection這兩個類我們要用,這時候我們的程序就寫得比較動態化,通過Class tc =Class.forName("com.java.dbtest.TestConnection");通過類的全類名讓jvm在服務器中找到並加載這個類,而如果是oracle則傳入的參數就變成另一個了。這時候就可以看到反射的好處了,這個動態性就體現出java的特性了!舉多個例子,大家如果接觸過spring,會發現當你配置各種各樣的bean時,是以配置文件的形式配置的,你需要用到哪些bean就配哪些,spring容器就會根據你的需求去動態加載,你的程序就能健壯地運行。


反射通過對象獲取到類,Employee employee=new Employee(); employee.getClass();getClass是Object類中的方法。

註意Class文件就是反射機制的源頭。只要找到你用的類的Class類型對象。就能找到你類的方法。就可以調用這個類的方法。

獲取Class類的對象的方法有如下三種。


如下圖


借鑒如下大佬的文章。
作者:老頑童周伯通
鏈接:https://www.zhihu.com/question/24304289/answer/147529485
來源:知乎


java的反射機制的好處