Java類初始化的時機
1.當虛擬機器啟動時,載入使用者指定的main方法所在的類。
2.當在main方法遇到了new關鍵字時,初始化new指令的目標類。
3.當遇到靜態方法呼叫時,初始化靜態方法所在的類。
4.當遇到靜態欄位呼叫時,初始化靜態方法所在的類。
5.子類的初始化時會先觸發父類的初始化。
6.使用反射呼叫某個類時,會初始化該類。
7.如果一個介面定義了default方法(jdk1.8新特性),那麼直接實現或者間接實現該介面的類的初始化,會觸發該介面的初始化。
測試:
執行class檔案時,可以通過JVM引數 -verbose:class 檢視類載入的先後順序。
測試第一條和第二條。
public class TestClassLoader{
public static void main(String[] args){
Demo1 demo1 = new Demo1();
}
}
public class Demo1{
}
相關推薦
java中類初始化時機
java虛擬機器規範雖然沒有強制性約束在什麼時候開始類載入過程,但是對於類的初始化,虛擬機器規範則嚴格規定了有且只有四種情況必須立即對類進行初始化,遇到new、getStatic、putStatic或invokeStatic這4條位元組碼指令時,如果類沒有進行過初始化,則需要先觸發其初始化。 生成這
Java類初始化的時機
1.當虛擬機器啟動時,載入使用者指定的main方法所在的類。 2.當在main方法遇到了new關鍵字時,初始化new指令的目標類。 3.當遇到靜態方法呼叫時,初始化靜態方法所在的類。 4.當遇到靜態欄位呼叫時,初始化靜態方法所在的類。 5.子類的初始化時會先觸發父類的初始化。 6
JAVA類 初始化過程
在Java的物件產生的時候虛擬機器jvm會做一系列的行為,而理解這些行為將有助於我們更深入的理解Java 當我們第一次呼叫一個類的某個靜態方法或訪問某個靜態變數時將首先發生類載入,其過程如下 Java虛擬機器JVM會先去方法區中查詢是否已經載入java類名.class如果已
Java基礎——靜態程式碼塊、構造程式碼塊、建構函式以及Java類初始化順序
閱讀目錄 建構函式 構造程式碼塊 靜態程式碼塊 Java類初始化順序 靜態程式碼塊:用staitc宣告,jvm載入類時執行,僅執行一次 構造程式碼塊:類中直接用{}定義,每一次建立物件時執行。 執行順序優先順序:靜態塊,main(),構造塊,構造方法。
Java 類初始化順序
靜態屬性:static 開頭定義的屬性 靜態方法塊: static {} 圈起來的方法塊 普通屬性: 未帶static定義的屬性 普通方法塊: {} 圈起來的方法塊 建構函式: 類名相同的方法 方法: 普通方法 父類靜態變數 > 父類靜態初始塊 &
Java類初始化和例項化
摘要: Java有以下幾種方式建立類物件: 利用new關鍵字 利用反射Class.newInstance 利用Constructor.newIntance(相比Class.newInstance多了有參和私有建構函式) 利用Cloneable/Object.clone() 利
JAVA類初始化及例項初始化時內部的執行順序
記得剛畢業時,應聘JAVA開發崗位,做招聘單位的筆試時,經常有JAVA類內部的執行順序的考察,就是讓你寫出某個程式的列印結果的順序,現在整理一下。 如果一個類,有構造器,普通塊,靜態塊,那該類初始化時,它的執行順序如何呢?如果它有父類,並且它的父
Java類初始化順序
我們大家都知道,對於靜態變數、靜態初始化塊、變數、初始化塊、構造器,它們的初始化順序以此是(靜態變數、靜態初始化塊)>(變數、初始化塊)>構造器。我們也可以通過下面的測試程式碼來驗證這一點: public class InitialOrderTest { /
java 類 初始化 執行順序
package inheritance; public class InitializeClassObject { public static void main(String[] args) { System.out.println("初始化第一個C類物件");
Java提高篇——靜態程式碼塊、構造程式碼塊、建構函式以及Java類初始化順序
靜態程式碼塊:用staitc宣告,jvm載入類時執行,僅執行一次構造程式碼塊:類中直接用{}定義,每一次建立物件時執行。執行順序優先順序:靜態塊,main(),構造塊,構造方法。 建構函式 public HelloA(){//建構函式 } 關於建構函式,以下幾點
java 類初始化,例項化順序
記得在學校初學java時講過,當時也懂了,不過今天看到一個問題時竟然又看不懂,理解不了了....果斷重新梳理了一遍。先上題: class T implements Cloneable{ public static int k = 0; public st
Java基礎學習系列-Java類初始化和例項化
Java有以下幾種方式建立類物件: 利用new關鍵字 利用反射Class.newInstance 利用Constructor.newIntance(相比Class.newInstance多了有參和私有建構函式) 利用Cloneable/Object.clon
Java虛擬機 - 類初始化
結果 信息 nbsp 程序代碼 也有 編譯期 說明 加載 指令 【深入Java虛擬機】之三:類初始化 類初始化是類加載過程的最後一個階段,到初始化階段,才真正開始執行類中的Java程序代碼。虛擬機規範嚴格規定了有且只有四種情況必須立即對類進行初始化: 遇到new、
二、Java面向對象(8)_繼承思想——子類初始化過程
AR args col color 所有 通過 子類初始化 anim turn 2018-05-01 子類初始化過程 構造器的調用遵循以下的順序: (1):調用基類構造器。這個步驟會不斷地反復遞歸下去,首先是構造這種層次結構的根,然後是下一層導出類,等等,直到最低層
JAVA中初始化及默認值,包裝類與基本類型
屬於 java val 初始化 成員 als integer 基本數據 lean 當變量作為作為類成員使用時,java才確保給定其初始值,防止程序運行時錯誤 數據類型初始值 byte 0 short 0 int 0 long 0L char ‘u000
【深入Java虛擬機(3)】:類初始化
不同 main class out pri ref 另一個 字節碼 被動引用 類初始化是類加載過程的最後一個階段,到初始化階段,才真正開始執行類中的Java程序代碼。虛擬機規範嚴格規定了有且只有四種情況必須立即對類進行初始化:遇到new、getstatic、putstati
Java與Python類初始化
1 Java類初始化 原始碼 public class Xin { String love; // 初始化__init__ public Xin(String name) { System.out.println("Author
阿里P7帶你深入理解Java虛擬機器總結——類初始化過程
類的初始化過程 非法向前引用 編譯器手機的順序是由語句在原始檔中出現的順序決定的,靜態語句塊中只能訪問到定義在靜態語句之前的變數,定義它之後的變數,可以賦值,但不能訪問 public class Test{ static{ i=0; system.out.print(
【深入Java虛擬機器】之四:類初始化
類初始化是類載入過程的最後一個階段,到初始化階段,才真正開始執行類中的Java程式程式碼。虛擬機器規範嚴格規定了有且只有四種情況必須立即對類進行初始化: 遇到new、getstatic、putstatic、invokestatic這四條位元組碼指令時,
java 中類初始化,構造方法,靜態成員變數,靜態塊的載入順序
1、編譯和執行概念要搞清:編譯即javac的過程,負責將.java檔案compile成.class檔案,主要是型別、格式檢查與編譯成位元組碼檔案,而載入是指java *的過程,將.class檔案載入到記憶體中去解釋執行,即執行的時候才會有載入一說。 2、類的載