類的載入過程

2021-10-07 12:02:58 字數 1402 閱讀 6565

類的載入過程,可分為三個階段,載入、連線、初始化。

初始化,為類的靜態變數賦予預設的初始值

jvm規範規定了以下六種主動使用類的場景

被動呼叫,不會導致類的載入和初始化

先看乙個面試題

public

class

singleton

public

static singleton getinstance()

public

static

void

main

(string[

] args)

}

程式的輸出結果是什麼呢,如果1和2的位置切換,結果又是什麼呢?

//1

private

static

int x =0;

private

static

int y;

private

static singleton instance =

newsingleton()

;//2

在連線階段準備過程中,每個變數都被賦予了相應的初始值

x=0 , y=0 , instance = null

下面跳過解析過程,再來看類的初始化階段,初始化階段會為每乙個類變數賦值

x = 0 , y = 0 , instance = new singleton()

在net singleton()的時候,會執行建構函式,x和y會自增,因此結果為:

x = 1, y = 1

再來看調換順序之後的輸出

private

static singleton instance =

newsingleton()

;//2

//1private

static

int x =0;

private

static

int y;

在連線階段準備過程中,每個變數都被賦予了相應的初始值

instance = null, x=0 , y=0

在類的初始化階段,需要為每乙個類賦予程式編寫時所期待的正確的初始值,首先會進入instance的建構函式中

instance = new singleton(), x=1, y=1

然後,為x初始化,由於x沒有顯式的賦值,因此0才是所期望的值,而y沒有給定初始值,在建構函式中計算所得的值就是正確賦值,因此結果

會變成:

instance = new singleton(), x=0, y=1

類的載入過程

類的載入過程 1 在建立物件時,會先判斷物件所屬的型別 類 在記憶體中是否存在,如果存在則直接使用 如果不存在,則把類載入到記憶體中的方法區下 2 在把類 class 載入到方法區時,分兩種情況 2.1 從.class檔案的上面向下依次載入內容 2.2 靜態的內容載入到方法區的靜態區域下 非靜態內容...

類的載入過程

person person new person 為例進行說明。1 因為new用到了person.class,所以會先找到person.class檔案,並載入到記憶體中 2 執行該類中的static 塊,如果有的話,給person.class類進行初始化 3 在堆記憶體中開闢空間分配記憶體位址 4 ...

類的載入過程

首先要知道的一點 程式呼叫時,jvm會初始化,初始化的過程中會生成多個類載入器,jvm呼叫指定的類載入器去載入類即可。類載入器分為兩類 系統提供和手動編寫 系統提供 解釋 我們把每一層上面的類載入器叫做當前層類載入器的父載入器,當然,它們之間的父子關係並不是通過繼承關係來實現的,而是使用組合關係來復...