假設我們撰寫了三個 Java 類別,分別是 Main、A、以及 B。他們的程式
碼分別如下所示:
檔案:A.java
public class A
{
public void print()
{
System.out.println("Using Class A") ;
}
}
檔案:B.java
public class B
{
public void print()
{
System.out.println("Using Class B") ;
}
}
檔案:Main.java
public class Main
{
public static void main(String args[])
{
A a1 = new A() ;
a1.print() ;
B b1 = new B() ;
b1.print() ;
}
}
這三個檔案編譯好之後,所在目錄的內容如下圖所示:
接著,我們執行指令:
java –verbose:class Main
螢幕上會產生一長串的輸出結果,我們擷取最後的部分呈現出來,如下圖所示:
螢幕上的輸出告訴我們,類別載入器(class loader)在背景偷偷的運作,除了將
Java 程式運作時所需要的基礎類別函式庫(又叫核心類別函式庫, Core
Classes)載入記憶體(位於<JRE 所在位置>\lib\rt.jar 之中),我們的程式所用到
的類別 Main.class、A.class、以及 B.class 也都偷偷被類別載入器載入了記憶
體之中。類別載入器的功用,就是把類別從靜態的硬碟裡(.class 檔),複製一份
放到記憶體之中,並做一些初始化的工作,讓這個類別”活起來”,其他人就能夠
使用它的功能。
上述的螢幕輸出還透露了一個訊息,就是 - 我們自己所撰寫的類別(A.class
與 B.class)只會在”用到”的時候才載入(Main.class 是起始類別,所以一定比
A.class 和B.class 優先載入),而不是像基礎類別函式庫(位於 rt.jar之中的類別)
一次一股腦地全部載入記憶體之中,所以螢幕上才會輸出先載入了 A.class,然
後印出”Using Class A”,再印出載入了B.class 的訊息,然後再印出”Using Class
B”。
像基礎類別函式庫這樣的載入方法我們叫做預先載入(pre-loading),這是
因為基礎類別函式庫裡頭的類別大多是Java程式執行時所必備的類別,所以為
了不要老是做浪費時間的 I/O 動作(讀取檔案系統,然後將類別檔載入記憶體之
中),預先載入這些類別會讓 Java 應用程式在執行時速度稍微快一些。相對來
說,我們自己所撰寫的類別之載入方式,叫做依需求載入(load-on-demand),
也就是 Java 程式真正用到該類別的時候,才真的把類別檔從檔案系統之中載入
記憶體。
看到上述的說明,大家就會立刻有了結論:『只要參考到特定類別,類別載
入器就會自動幫我們載入類別。』這個結論對嗎? 我們來試試修改後的
Main.java:
檔案:Main.java
public class Main
{
public static void main(String args[])
{
A a1 = new A() ;
B b1 ;
}
}
執行
java –verbose:class Main
之後,螢幕上的輸出如下:
這個輸出告訴我們,只有單獨宣告(如: B 類別)而已,是不會促使類別載入器幫
我們載入類別的,只有實體化指令(new XXX())才會讓類別載入器幫我們載入該
類別。
- 大小: 22.4 KB
- 大小: 42.2 KB
- 大小: 38.6 KB
分享到:
相关推荐
《Java深度历险》是一本深入探讨Java技术的书籍,旨在帮助读者理解Java的内在机制,包括JVM(Java虚拟机)、JDK(Java开发工具包)和JRE(Java运行环境)之间的关系,以及类加载的过程等核心概念。通过这本书,你...
关于JDK有两个问题是很容易一直困扰Java程序员的地方:一个是CLASSPATH的问题,其实从原理上来说,是要搞清楚JRE的ClassLoader是如何加载Class的...推荐看一下王森的《Java深度历险》,对这两个问题进行了深入的探讨。
《Java深度历险》这本书是Java开发者的一本深入学习指南,它涵盖了Java编程语言的核心概念、高级特性以及实际开发中的应用技巧。通过本书,读者可以系统地了解Java的各个方面,从而提升自己的编程技能和问题解决能力...
《Java深度历险》是一本全面探讨Java技术的书籍,主要关注Java虚拟机(JVM)的深入理解和相关概念。本书旨在帮助读者不仅掌握Java编程的基本语法,而且能够理解Java平台的工作原理,从而提升编程技能和解决问题的...
java深度历险.rarjava深度历险.rarjava深度历险.rarjava深度历险.rarjava深度历险.rar
Java深度历险 深入Java 2 SDK 深入类别载入器 Java与MS Office 用Visual Studio.net操控Java虚拟机 package与import机制 Ant 附录A.Java 2 SDK原版码概观
《王森 Java深度历险》是一本专门为Java初学者精心编写的教材,旨在引领读者深入探索Java编程的世界。王森,作为业界知名的IT专家,以其丰富的教学经验和深厚的编程功底,将复杂的Java知识以易懂的方式呈现出来,...
《Java 深度历险》是一本专为Java开发者准备的深度学习书籍,它涵盖了Java编程语言的核心概念、高级特性以及实战应用。通过这本书,读者可以深入理解Java的内部机制,提升编程技能,实现从初级到高级的跨越。下面...
Java深度历险.pdf
《Java深度历险》这本书主要探讨了Java编程语言的深度知识,涵盖了从早期版本到Java 2 SDK的演进历程。Java是由Sun Microsystems开发的一种高级编程语言,最初被称为OAK,后来发展为Java 1.0,并逐步演变为Java 1.1...
《Java深度历险》是Java学习者的一本经典著作,由王森编著,深受广大编程爱好者喜爱。这本书深入浅出地讲解了Java语言的核心概念和技术,是初学者步入Java世界的理想指南。作为一本深度探索Java的书籍,它涵盖了从...
Java深度历险(合集).pdf,深度介绍!
《JAVA深度历险》是由知名Java专家王森撰写的一本深度探索Java编程的著作,PDF格式使得读者可以方便地在电子设备上阅读和学习。这本书是Java开发者提升技能、深化理解的重要参考资料,涵盖了从基础到高级的众多Java...
《Java深度历险》是一本面向已有基础的Java程序员的高级读物,旨在帮助读者深入理解Java语言的核心机制和高级特性。这本书涵盖了多个关键知识点,包括但不限于类加载机制、垃圾回收、多线程、并发编程、JVM优化、...
在《Java深度历险》这本书的第二章中,作者深入探讨了Java语言中的一个重要概念——**类别加载器**(Class Loader)。这一章节旨在揭示Java语言的动态性,并通过深入分析类别加载器的工作原理来帮助读者理解如何实现...
《Java深度历险.pdf》这份文档主要围绕Java技术的一些深入理解和应用展开,涵盖Java的运行环境(JDK和JRE)、Java虚拟机(JVM)、Java程序的运行机制以及Java开发工具的配置等多方面的知识。接下来,我将对文档中...