JVM中類的初始化時機

2021-09-24 10:19:36 字數 2035 閱讀 1994

只有對類進行主動引用,才會觸發其初始化方法,而除此之外的引用方式稱之為被動引用,不會觸發其初始化方法

這裡先定義乙個utils(名字隨便起的,不要見怪)作為被測試類

package day12;

/** * @author :weihuanwen

* @date :created in 2019/5/23 00:14

* @description :

* @version: 1.0

*/public class utils

/*** 定義靜態方法

*/public static void staticmethod()

/*** 定義成員方法

*/public void instancemethod()

}

package day12;

public class test01

}

utils類被載入!

package day12;

public class test01

}

utils類被載入!

執行了靜態方法!

package day12;

public class test01

}

utils類被載入!

package day12;

public class test01

}

utils類被載入!

package day12;

public class test01

}

utils類被載入!

package day12;

/** * 父類

*/public class superclass

}

package day12;

/** * 子類

*/public class subclass extends superclass

}

package day12;

public class test01

}

父類被載入!

子類被載入!

package day12;

public class mark

public static void main(string args)

}class referfirst

}class refersecond

}

標記類mark被載入!

除了以上七種情況外的都尊徐被動引用,這裡只介紹幾種被動引用

package day12;

/** * 父類

*/public class superclass

}

package day12;

/** * 子類

*/public class subclass extends superclass

}

package day12;

public class test01

}

父類被載入!

10

package day12;

public class test01

}

****常量在編譯階段會存入呼叫類的常量池中,本質沒有直接引用到定義的常量類中,因此不會觸發定義的常量類初始化

package day12;

public class person

}

package day12;

public class test01

}

無輸出結果

類初始化時機

虛擬機器規範中並沒有強制約束何時進行載入,但是規範嚴格規定了有且只有下列五種情況必須對類進行初始化 載入 驗證 準備都會隨之發生 以上 5 種場景中的行為稱為對乙個類進行主動引用。除此之外,所有引用類的方式都不會觸發初始化,稱為被動引用。被動引用的常見例子包括 system.out.println ...

類的初始化時機

什麼情況下需要開始類載入過程的第乙個階段 載入 虛擬機器規範中並沒強行約束,這點可以交給虛擬機器的的具體實現自由把握,但是對於初始化階段虛擬機器規範是嚴格規定了如下幾種情況,如果類未初始化會對類進行初始化。建立類的例項 訪問類的靜態變數 除常量 被final修辭的靜態變數 原因 常量一種特殊的變數,...

資源的初始化時機

zend framework 中的資源是什麼時候初始化的呢?還是直接上 來看比較有說服力 protected function bootstrap resource null foreach this getpluginresourcenames as resource elseif is stri...