本文目錄一覽:
北大青鳥設計培訓:Java類加載機制?
每個開發人員對java.lang.ClassNotFoundExcetpion這個異常肯定都不陌生,這背後就涉及到了java技術體系中的類加載。
Java的類加載機制是技術體系中比較核心的部分,雖然和大部分開發人員直接打交道不多,但是對其背後的機理有一定理解有助於排查程序中出現的類加載失敗等技術問題,對理解java虛擬機的連接模型和java語言的動態性都有很大幫助。
電腦培訓就得好好的為大家介紹一下。
那麼什麼是類的加載?類的加載指的是將類的.class文件中的二進制數據讀入到內存中,將其放在運行時數據區的方法區內,然後在堆區創建一個java.lang.Class對象,用來封裝類在方法區內的數據結構。
類的加載的最終產品是位於堆區中的Class對象,Class對象封裝了類在方法區內的數據結構,並且向Java程序員提供了訪問方法區內的數據結構的接口。
Java類加載機制類加載器是Java語言的一個創新,也是Java語言流行的重要原因之一。
它使得Java類可以被動態加載到Java虛擬機中並執行。
類加載器從JDK1.0就出現了,最初是為了滿足JavaApplet的需要而開發出來的。
JavaApplet需要從遠程下載Java類文件到瀏覽器中並執行。
現在類加載器在Web容器和OSGi中得到了廣泛的使用,而類加載器並不需要等到某個類被“首次主動使用”時再加載它,JVM規範允許類加載器在預料某個類將要被使用時就預先加載它,如果在預先加載的過程中遇到了.class文件缺失或存在錯誤,類加載器必須在程序首次主動使用該類時才報告錯誤(LinkageError錯誤)如果這個類一直沒有被程序主動使用,那麼類加載器就不會報告錯誤。
類的生命周期類加載的過程中包括有加載,驗證,準備,解析,初始化五個階段。
而需要注意的是在這五個階段中,加載、驗證、準備和初始化這四個階段發生的順序是確定的,而解析階段則不一定,它在某些情況下可以在初始化階段之後開始,這是為了支持Java語言的運行時綁定(也成為動態綁定或晚期綁定)。
另外注意這裡的幾個階段是按順序開始,而不是按順序進行或完成,因為這些階段通常都是互相交叉地混合進行的,通常在一個階段執行的過程中調用或激活另一個階段。
java可以動態加載一個jar包,並且調用裡面的類和方法嗎?
可以的
jar可以看成是一個存放很多class的的地方,jar包放入classpath後,其實只要能實現動態的加載類就可以實現題目中的需求了
技術是 java 反射機制,就是一個利用提供類全名而得到這個類實例的機制
通過反射得到Class這個類,然後可以得到關於這個類的方法,字段等相關信息
具體可以查看相關知識
一個java工程在運行的時候怎麼動態加載另一個java工程?
直接寫上 new ClassFromPrj2(); 不用你手工“加載”,Java 中加載默認是由 JVM 虛擬器自動完成的,只要引用到的類ClassFromPrj2 在 classpath 中即可。等你達到中級水平,知道 Java Reflection 和 ClassLoader 之後你就知道是怎麼回事了。
我是假設 loadJavaPrj 是第一個工程,假設它使用了第二個工程的類 ClassFromPrj2 的話,那就是
ClassFromPrj2 worker = new ClassFromPrj2();
worker.xxx();
你在運行中需要確保的是:prj2 這個工程的 jar 或 class folder 出現在 java -cp XXX 這個 classpath (-classpath 或 -cp) 參數列表中就可以了。
你在eclipse 項目的 .classpath 文件中發現的東西表明你還是嘗試了解工具的細節,但那個僅僅是 Eclipse 用來幫我們生成命令行參數的配置文件,最終我們需要知道 javac 或 java 這樣的命令行需要什麼參數,這一點一般書上和老師都會講到(但他們一般不會講解Eclipse怎麼工作的)。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/244235.html