說明:如果您有任何疑問或想咨詢其他業(yè)務(wù)請撥打電話 400 685 0732
全網(wǎng)監(jiān)測海量數(shù)據(jù)按需發(fā)布監(jiān)測預(yù)警
實時把握輿情動態(tài)精準(zhǔn)追溯信息源頭
在學(xué)習(xí)java的過程當(dāng)中,我們經(jīng)常會聽見java反射機制的詞語,而java反射機制又經(jīng)常與JVM相聯(lián)系,那么什么是JVM?java反射機制又該如何理解呢?今天我們就一起來好好的了解一下吧。
java反射機制——什么是JVM
首先我們了解一下JVM,什么是JVM,Java的虛擬機,java之所以能跨平臺就是因為這個東西,你可以理解成一個進程,程序,只不過他的作用是用來跑你的代碼的。上圖是java的內(nèi)存模型,我們關(guān)注的點,一個方法區(qū),一個棧,一個堆,初學(xué)的時候老師不深入的話只告訴你java的內(nèi)存分為堆和棧。
假如你寫了一段代碼:Objecto=new Object();
運行了起來!
首先JVM會啟動,你的代碼會編譯成一個.class文件,然后被類加載器加載進jvm的內(nèi)存中,你的類Object加載到方法區(qū)中,創(chuàng)建了Object類的class對象到堆中,注意這個不是new出來的對象,而是類的類型對象,每個類只有一個class對象,作為方法區(qū)類的數(shù)據(jù)結(jié)構(gòu)的接口。jvm創(chuàng)建對象前,會先檢查類是否加載,尋找類對應(yīng)的class對象,若加載好,則為你的對象分配內(nèi)存,初始化也就是代碼:new Object()。
上面的流程就是你自己寫好的代碼扔給jvm去跑,跑完就over了,jvm關(guān)閉,你的程序也停止了。
java反射機制是什么
反射是什么呢?當(dāng)我們的程序在運行時,需要動態(tài)的加載一些類這些類可能之前用不到所以不用加載到j(luò)vm,而是在運行時根據(jù)需要才加載,這樣的好處對于服務(wù)器來說不言而喻,舉個例子我們的項目底層有時是用mysql,有時用oracle,需要動態(tài)地根據(jù)實際情況加載驅(qū)動類,這個時候反射就有用了,假設(shè)com.java.dbtest.myqlConnection,com.java.dbtest.oracleConnection這兩個類我們要用,這時候我們的程序就寫得比較動態(tài)化,通過Classtc=Class.forName(“com.java.dbtest.TestConnection”);通過類的全類名讓jvm在服務(wù)器中找到并加載這個類,而如果是oracle則傳入的參數(shù)就變成另一個了。這時候就可以看到反射的好處了,這個動態(tài)性就體現(xiàn)出java的特性了!舉多個例子,大家如果接觸過spring,會發(fā)現(xiàn)當(dāng)你配置各種各樣的bean時,是以配置文件的形式配置的,你需要用到哪些bean就配哪些,spring容器就會根據(jù)你的需求去動態(tài)加載,你的程序就能健壯地運行。
有關(guān)java反射機制的相關(guān)內(nèi)容,今天就介紹到這里了,在學(xué)習(xí)java相關(guān)內(nèi)容時,不要死記硬背,一定要理解,只有徹底的理解這些內(nèi)容你才能夠真正的掌握。如果你還想了解更多與之有關(guān)的內(nèi)容,歡迎關(guān)注我們文軍營銷官網(wǎng)。
推薦閱讀
說明:如果您有任何疑問或想咨詢其他業(yè)務(wù)請撥打電話 400 685 0732