您的位置:

静态代码块(Static Code Block)

在Java语言中,静态代码块是定义在类中,使用关键字static和{}括起来的一段代码,它在类的加载期间只被执行一次。静态代码块的主要功能是用于对类进行默认的初始化或对一些类变量进行初始化操作。

一、静态代码块的基本语法

静态代码块由关键字static和{}括起来的一段代码组成,它的基本语法格式如下:

static {
    // 静态代码块的具体执行内容
}

静态代码块没有方法名,并且不需要在外部进行调用。在Java程序进行编译时,静态代码块中的代码会被自动合并到类构造器内部,并且会在类加载期间被执行,且只会执行一次。

二、静态代码块的应用场景

1、类变量的初始化

静态代码块可以对类的静态变量进行初始化。例如,下面的代码是一个简单的小例子:

class MyClass {
    public static int count;
    static {
        count = 0;
    }
    
    public MyClass() {
        count++;
    }
}

在这个例子中,我们定义了一个静态变量count,并在静态代码块中对其进行赋值。由于count是一个类变量,因此整个程序中只有一个count变量,它的值在第一次执行静态代码块时被赋值为0。

在MyClass类的构造函数中,我们每次实例化一个对象时,都会将count加1。这意味着,我们可以通过MyClass.count来获取到当前已经创建了多少个MyClass对象:

public static void main(String[] args) {
    MyClass obj1 = new MyClass();
    MyClass obj2 = new MyClass();
    MyClass obj3 = new MyClass();
    System.out.println(MyClass.count); // 输出 3
}

2、对类的默认初始化

当一个类被加载时,会执行静态代码块来对类进行初始化,这是Java语言对类的默认初始化。

例如,下面的代码会输出"Hello World!",这是因为当程序加载MyClass类时,静态代码块被执行,所以会执行System.out.println()方法,打印出"Hello World!":

class MyClass {
    static {
        System.out.println("Hello World!");
    }
}

三、静态代码块的特点

1、执行顺序

在一个类中定义多个静态代码块时,它们的执行顺序是按照它们在类中出现的顺序执行的。

例如:

class MyClass {
    static {
        System.out.println("First static block.");
    }
    
    public static int count = 0;
    
    static {
        System.out.println("Second static block.");
    }
}

此时执行MyClass.count的值是0,同时,执行结果会输出"First static block."和"Second static block."。

2、静态代码块只执行一次

静态代码块只在类第一次加载时被执行,以后再创建该类的实例时,静态代码块不再被执行。

例如:

class MyClass {
    static {
        System.out.println("First static block.");
    }
    
    public MyClass() {
        System.out.println("Hello World");
    }
}

此时,只有在第一次创建MyClass对象时,才会执行静态代码块并输出"First static block.",之后再创建MyClass对象时不再执行。

3、静态代码块和静态变量的执行顺序

对于下面的代码:

class MyClass {
    public static int count = 0;
    
    static {
        System.out.println("Static block.");
    }
    
    public MyClass() {
        count++;
        System.out.println(count);
    }
}

当我们创建一个MyClass对象时,输出的结果是什么?

答案是:

Static block.
1

这是因为静态代码块会在类的静态变量之前被执行,所以静态变量count在静态代码块执行完毕后被赋值为0。

四、总结

静态代码块是Java语言中一个重要的特性,它主要用于对类变量进行初始化和对类进行默认初始化。静态代码块的语法简单,但应用广泛,可以用于各种场合,给程序员提供了很大的便利。