1. 程式人生 > >Java程式碼塊,Java執行時序

Java程式碼塊,Java執行時序

作者:雲都小生

概述


Java中的程式碼塊有四種,普通程式碼塊、構造程式碼塊、靜態程式碼塊,以及執行緒相關的同步程式碼塊。

這些程式碼塊都有自己特殊的用途。

普通程式碼塊


普通的程式碼塊定義在方法中,奉行的是“遇到就執行”的原則。它定義的方式如下↓
public class Test {
    public static void main(String[] args) {
        int x;

        {
            x = 2;
            System.out.println("執行了普通程式碼塊1");
        }

        {
            x = 4;
            System.out.println("執行了普通程式碼塊2");
        }

        System.out.println(x);
    }
}

//執行結果
//執行普通程式碼塊1
//執行普通程式碼塊2
//4

普通程式碼塊通常用來對欄位進行初始化。

構造程式碼塊


構造程式碼塊是定義在類內部、方法之外,沒有用static修飾,語法跟普通程式碼塊一樣。
public class CodeBlock
{       
    {
        System.out.println("構造程式碼塊");
    }

    CodeBlock(){
        System.out.println("構造方法");
    }
}

public class Test
{
    public static void main(String[] args) {
        CodeBlock codeBlock = new CodeBlock();

    }
}

//執行結果
//構造程式碼塊
//構造方法

構造程式碼塊,一般用來對屬性進行初始化,它是在物件建立之後被呼叫,但是呼叫的優先順序比構造方法快。

靜態程式碼塊


靜態程式碼塊也是定義在類中,但不是定義在方法中,靜態程式碼塊比構造程式碼塊、構造方法更快被呼叫。在建立物件之前,如果準確的來說,JVM在載入類時就會執行靜態程式碼塊。
public class CodeBlock 
{
    {
        System.out.println("靜態程式碼塊");
    }

    {
        System.out.println("構造程式碼塊");
    }

    CodeBlock(){
        System.out.println("構造方法");
    }
}

public class Test
{
    public static void main(String[] args) {
        CodeBlock codeBlock = new CodeBlock();
    }
}

//執行結果
//靜態程式碼塊
//構造程式碼塊
//構造方法

靜態程式碼塊通常用來對靜態屬性進行初始化。

如果你在一個有main方法的類中,放一個靜態程式碼塊,靜態程式碼塊會優先於main方法執行。

public class Test 
{
    static
    {
        System.out.println("靜態程式碼塊");
    }

    {
        System.out.println("構造程式碼塊");
    }

    Test(){
        System.out.println("構造方法");
    }

    public static void main(String[] args) {
        System.out.println("主方法");
        CodeBlock codeBlock = new CodeBlock();
    }
}

//靜態程式碼塊
//主方法
//靜態程式碼塊
//構造程式碼塊
//構造方法

2018/4/10 1:05:40 @Author:雲都小生