Java背後的秘密之Java的類裝載器03

來源:互聯網
上載者:User

Java語言是一種先天具備動態性的語言,之所以具備動態性正是因為Java類裝載器的存在。這會給我們開發帶來革命性的變革,因為我們有可能開發出有彈性、易擴充的程式。從而大大增強我們程式的可維護性。按載入條件分為預先載入與按需載入。
1.通常基礎類庫需要預先載入。(常駐記憶體)
2.自訂類庫需要按需載入。(使用時載入,使用完畢時由垃圾收集器負責釋放)

類裝載器運行模式分為兩種,如:

1.使用new關鍵字來隱式載入,首先來看一個例子:直接上代碼,很簡單的三個類。
        
public class A {public void print() {System.out.println("Using class A");}}
public class B {public void print() {System.out.println("Using class B");}}
public class Main {public static void main(String[] args) {A a = new A();a.print();B b = new B();b.print();}}

運行結果如下:

但是我們如果需要看類載入的詳細內容,我們就要用到這條命令:java -verbose:class Main


看看是不是首先載入的Java的基礎類庫,看最後幾行,首先載入Main,接下來執行個體化A類的時候會載入A,調用a.print()的時候列印了Using class A,然後載入B類,執行B中的方法。

2.使用Class.forName()方法載入類,這個做過J2EE開發的應該知道,在資料庫連接載入驅動的時候都可以這麼載入。還是看一個簡單的例子:

public interface Office {void start();}
public class Word implements Office {public void start() {System.out.println("Word start");}}
public class Excel implements Office {public void start() {System.out.println("Excel start");}}
public class Main {public static void main(String[] args) throws Exception{Class c = Class.forName(args[0]);Object o = c.newInstance();Office office = (Office) o;office.start();}}

繼續看一下載入的詳細內容:


詳細觀察一下最後幾行載入的順序,看看是否跟我們程式執行的是一樣的呢?
此處有一個結論:Java類裝載器會按照繼承體系從上至下的依次載入類,直到所有的祖先類都載入(上例中是介面),才輪到自己;相反,在Java類對象執行個體被收集釋放時,順序與載入相反。由此,我們也能看出,Java類的繼承體系不宜過長,因為那樣會使類的載入與釋放的效能受到影響。

3.直接使用類裝載器ClassLoader,例子是上一個例子的改版,只是修改了Main.java,其他三個類不變。

public class Main {public static void main(String[] args) throws Exception {System.out.println("begin load");// Main main = new Main();// ClassLoader loader = main.getClass().getClassLoader();ClassLoader loader = Main.class.getClassLoader();Class c = loader.loadClass(args[0]);System.out.println("begin init");Object o = c.newInstance();Office office = (Office) o;office.start();}}

首先獲得ClassLoader的執行個體,有兩種方法,上面注釋的為一種,放開的為另一種。然後調用loadClass()方法。運行一下,看下效果:

怎麼樣,Java語言夠動態吧。

轉載來源www.boobooke.com/bbs->J2EE專區->藍山作品—Java背後的秘密(匯總) 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.