class文件

class文件

class文件全名稱為Java class文件,主要在平台無關性和網路移動性方面使Java更適合網路。它在平台無關性方面的任務是:為Java程序提供獨立於底層主機平台的二進位形式的服務。

該文件打破了C或者C++等語言所遵循的傳統,使用這些傳統語言寫的程序通常首先被編譯,然後被連接成單獨的、專門支持特定硬體平台和操作系統的二進位文件。

執行過程


2.1 執行過程簡介
當編譯和連接一個C++程序時,所獲得的可執行二進位文件只能在指定的硬體平台和操作系統上運行,因為這個二進位文件包含了對目標處理器的機器語言。而Java編譯器把Java源文件的指令翻譯成位元組碼,這種位元組碼就是Java虛擬機的“機器語言”。
與普通程序不同的是,Java程序(class文件)並不是本地的可執行程序。當運行Java程序時,首先運行JVM(Java虛擬機),然後再把Java class載入到JVM裡頭運行,負責載入Java class的這部分就叫做Class Loader。
2.2 JVM中的ClassLoader
JVM本身包含了一個ClassLoader稱為Bootstrap ClassLoader,和JVM一樣,BootstrapClassLoader是用本地代碼實現的,它負責載入核心JavaClass(即所有java.*開頭的類)。
另外JVM還會提供兩個ClassLoader,它們都是用Java語言編寫的,由BootstrapClassLoader載入;其中Extension ClassLoader負責載入擴展的Javaclass(例如所有javax.*開頭的類和存放在JRE的ext目錄下的類)ApplicationClassLoader負責載入應用程序自身的類。
當運行一個程序的時候,JVM啟動,運行bootstrapclassloader,該ClassLoader載入java核心API(ExtClassLoader和AppClassLoader也在此時被載入),然後調用ExtClassLoader載入擴展API,最後AppClassLoader載入CLASSPATH目錄下定義的Class,這就是一個程序最基本的載入流程。
2.3 執行ClassLoader例子
什麼時候JVM會使用ClassLoader載入一個類呢?當你使用java去執行一個類,JVM使用ApplicationClassLoader載入這個類;然後如果類A引用了類B,不管是直接引用還是用Class.forName()引用,JVM就會找到載入類A的ClassLoader,並用這個ClassLoader來載入類B。JVM按照運行時的有效執行語句,來決定是否需要裝載新類,從而裝載儘可能少的類,這一點和編譯類是不相同的。