Java 代码块详解:普通、构造、静态代码块

/ JavaSE / 511浏览

Java代码块,使用{}来定义,同级别的代码块可以定义多个,并且代码块都是按照代码块的先后顺序来执行。

执行顺序为:静态代码块>构造代码块>构造方法。

普通代码块

定义:在方法体内使用{}声明,按代码顺序执行;
作用:可以在代码块中定义局部变量,限定变量的生命周期。

用例代码:

package cn.zealon.modifier.codeblock;

/**
 * 普通代码块
 * 定义:在方法体内使用{}声明,按代码顺序执行;
 * 作用:可以在代码块中定义局部变量,限定变量的生命周期。
 * @auther: Zealon
 */
public class UseCodeBlock1 {

    public static void main(String[] args){
        int num = 0;
        {
            num = 1;
            System.out.println(num);
        }

        num = 159;
        System.out.println(num);

        {
            double price = 4.5;
            double total = price*num;
            System.out.println(total);
        }
    }
}

由于是按先后顺序来执行,运行结果如下:

1
159
715.5

构造代码块

构造代码块,在类中使用{}来定义,多个代码块按先后顺序执行。

用例代码:

package cn.zealon.modifier.codeblock;

/**
 * 构造代码块
 * @auther: Zealon
 */
public class UseCodeBlock2 {
    {
        System.out.println("执行构造代码块1.");
    }

    public UseCodeBlock2(){
        System.out.println("执行构造方法.");
    }

    {
        System.out.println("执行构造代码块2.");
    }

    public static void main(String[] args){
        new UseCodeBlock2();
    }
}

由于构造代码执行顺序优先于构造方法,所以运行结果为:

执行构造代码块1.
执行构造代码块2.
执行构造方法.

静态代码块

静态代码块,在类中使用static{}定义,执行顺序最优先; 静态代码块类被加载时,只执行一次,多用于初始化一些静态成员变量。

用例代码:

package cn.zealon.modifier.codeblock;

/**
 * 静态代码块
 * @auther: Zealon
 */
public class UseCodeBlock3 {

    {
        System.out.println("执行构造代码块1.");
    }

    {
        System.out.println("执行构造代码块2.");
    }

    static {
        System.out.println("执行静态代码块1.");
    }

    static {
        System.out.println("执行静态代码块2.");
    }

    public UseCodeBlock3(){
        System.out.println("执行构造方法.");
    }

    public static void main(String[] args){
        new UseCodeBlock3();
    }
}

由于静态代码块执行顺序最高,所以运行结果如下:

执行静态代码块1.
执行静态代码块2.
执行构造代码块1.
执行构造代码块2.
执行构造方法.