Java中的静态代码块是在类被加载时执行的一段代码块。它用关键字 `static` 声明,并且没有参数。静态代码块在类加载的过程中执行,只执行一次,且在类的所有实例创建之前执行。
静态代码块通常用于初始化静态成员变量,加载静态资源,或者执行一些静态的初始化操作。它们在类加载时按照它们在类中的顺序执行,并且仅执行一次,即使没有创建类的实例也会执行。
下面是一个简单的静态代码块的示例:
```java
public class MyClass {
static {
System.out.println("静态代码块被执行!");
}
public static void main(String[] args) {
// 这里可以访问类的其他成员
}
}
```
当一个类被加载时,静态代码块会被执行。这个过程通常在首次创建类的实例之前发生,或者在访问类的静态成员变量或静态方法之前发生。静态代码块可以用来初始化静态成员变量,执行静态方法,加载静态资源,或者进行其他静态的初始化操作。
静态代码块有以下特点:
1. **执行顺序**:静态代码块在类被加载时执行,按照它们在类中出现的顺序执行。如果一个类中有多个静态代码块,它们会按照在源代码中的顺序依次执行。
2. **只执行一次**:静态代码块只会执行一次,即使类被加载多次也是如此。这意味着静态代码块中的代码在整个应用程序的生命周期中只会执行一次。
3. **访问权限**:静态代码块可以访问类的静态成员变量和静态方法,但是不能直接访问非静态成员变量和非静态方法。非静态成员变量和非静态方法只有在类的实例被创建后才能被访问。
4. **异常处理**:静态代码块中的异常可以通过捕获并处理来防止类加载失败。如果静态代码块中发生了异常,并且没有被处理,类加载过程将被终止,导致类加载失败。
下面是一个更详细的示例,演示了静态代码块的用法:
```java
public class MyClass {
static {
System.out.println("静态代码块1被执行!");
}
private static int staticVariable;
static {
staticVariable = 10;
System.out.println("静态代码块2被执行!");
}
public static void staticMethod() {
System.out.println("静态方法被调用!");
}
public static void main(String[] args) {
System.out.println("main 方法被执行!");
staticMethod(); // 调用静态方法
}
}
```
在这个示例中,当 `MyClass` 类被加载时,首先执行静态代码块1,然后初始化静态变量 `staticVariable`,最后执行静态代码块2。在 `main` 方法中,首先执行 `main` 方法,然后调用静态方法 `staticMethod()`,这个方法可以被静态代码块中的代码调用。