複製鏈接
請複製以下鏈接發送給好友

class文件

鎖定
class文件全名稱為Java class文件,主要在平台無關性和網絡移動性方面使Java更適合網絡。它在平台無關性方面的任務是:為Java程序提供獨立於底層主機平台的二進制形式的服務。
該文件打破了C或者C++等語言所遵循的傳統,使用這些傳統語言寫的程序通常首先被編譯,然後被連接成單獨的、專門支持特定硬件平台和操作系統的二進制文件
中文名
Java class
簡    稱
class文件
所屬語言
java
執行過程
Java虛擬機

class文件基本信息

通常情況下,一個平台上的二進制可執行文件不能在其他平台上工作。而Java class文件是可以運行在任何支持Java虛擬機的硬件平台和操作系統上的二進制文件。

class文件執行過程

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.*開頭的類和存放在JREext目錄下的類)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按照運行時的有效執行語句,來決定是否需要裝載新類,從而裝載儘可能少的類,這一點和編譯類是不相同的。