關於java中三種初始化塊的執行順序

来源:https://www.cnblogs.com/huxiaoyang/archive/2019/11/08/11823444.html

許多小伙伴對於java中的三種初始化塊的執行順序一直感到頭疼,接下來我們就來分析一下這三種初始化塊到底是怎麼運行的。有些公司也會將這個問題作為筆試題目。 下麵通過一段代碼來看看創建對象時這麼初始化塊是如何運行的 package com.hxy; public class CodeBlock{ pub ...


許多小伙伴對於java中的三種初始化塊的執行順序一直感到頭疼,接下來我們就來分析一下這三種初始化塊到底是怎麼運行的。有些公司也會將這個問題作為筆試題目。

下麵通過一段代碼來看看創建對象時這麼初始化塊是如何運行的

package com.hxy;
public class CodeBlock{
    public static void main(String[] args) {
        new HelloB();
       // new HelloB();
    }

}
class HelloA{
    //無參構造器
    public HelloA(){
        System.out.println("Hello A");
    }
    //初始化塊
    {
        System.out.println("I'm A");
    }
    //靜態初始化塊
    static{
        System.out.println("Static A");
    }
}
class HelloB extends HelloA{
    public HelloB(){
        System.out.println("Hello B");
    }
    {
        System.out.println("I'm B");
    }
    static{
        System.out.println("Static B");
    }
}

運行結果如下圖所示:

 

 從運行結果來看,在新創建一個對象的時候,程式先執行初始化塊,再執行構造器。

當普通初始化塊被static修飾後就變成了靜態初始化塊,也被稱作類初始化塊

普通初始化塊是對對象進行初始化,而靜態初始化塊是對類進行初始化。所以靜態初始化塊要比普通初始化塊先執行。

從上面的運行結果看。當第一次創建HelloB對象時,要先載入並初始化HelloB類。初始化HelloB類會先執行它父類的靜態初始塊(Static A),然後再執行它的靜態初始化塊。

綜上所述:初始化塊的執行順序為:靜態初始化塊、普通初始化塊、構造器。

接下來再看創建兩個HelloB對象時它們又是怎麼運行的。下麵是運行結果:

 

 從運行結果來看,可能出乎一些小伙伴的預料。

靜態初始化塊只在第一次創建對象時執行,也就是說不管創建幾次對象。靜態初始化塊都只會執行一次。普通代碼塊和構造器則是創建幾次執行幾次,且普通代碼塊比構造器先執行。

 


您的分享是我們最大的動力!

更多相關文章
  • 字元串或串(String)是由數字、字母、下劃線組成的一串字元。一般記為 s=“a1a2···an”(n>=0)。它是編程語言中表示文本的數據類型。在程式設計中,字元串(string)為符號或數值的一個連續序列,如符號串(一串字元)或二進位數字串(一串二進位數字)。 String類型你一定不陌生,畢 ...
  • 我們知道,swoole中有兩大進程,分別是 master 主進程和 manager 管理進程。 其中 master 主進程中會有一個主 reactor 線程和多個 reactor 線程,主要的作用就是用來維護TCP連接,處理網路IO,收發數據。 而 manager 管理進程,作用則是 fork 和管 ...
  • 1. random模塊 導入的是random模塊,格式是: import random 1.1 隨機小數 取隨機小數 : 數學計算。 print(random.random()) # 取0-1之間的小數print(random.uniform(1,2)) # 取1-2之間的小數 1.2 隨機整數 取 ...
  • 一、阻塞隊列:用於保存等待執行的任務。在阻塞隊列中,線程阻塞的兩種情況: 1.當隊列中沒有數據的情況下,消費者端的所有線程都會被自動阻塞(掛起),直到有數據放入隊列。 2.當隊列中填滿數據的情況下, 生產者端的所有線程都會被自動阻塞,知道隊列中有空位置,線程被自動喚醒。 二、阻塞隊列的主要方法 拋出 ...
  • 一、實習內容 選擇一個調度演算法,實現處理器調度。 二、實習目的 在採用多道程式設計的系統中,往往有若幹個進程同時處於就緒狀態。當就緒進程個數大於處理器數時,就必須依照某種策略來決定哪些進程優先占用處理器。本實習模擬在單處理器情況下的處理器調度,幫助學生加深瞭解處理器調度的工作。 三、實習題目 本實習 ...
一周排行
x