什么是static块
在Java中,static块是一个用static关键字修饰的代码块,它可以在类被加载时执行,也可以在类被实例化之前执行。static块可以用于初始化静态变量、执行一些静态操作或者做一些预处理工作。static块的语法如下:
```java
static {
// static块中的代码
}
```
static块的执行时机
static块的执行时机是在类被加载时执行,而类的加载时机是在以下三种情况下会触发:
1. 创建类的实例
2. 访问类的静态变量或方法
3. 使用反射方式加载类
当Java虚拟机(JVM)在第一次加载类时,会执行类中所有的静态代码块,包括static变量的初始化和静态方法的执行。此后,每次访问类的静态变量或方法时,不会再执行static块。
static块的作用
static块可以用于静态变量的初始化、静态方法的执行以及一些预处理工作。下面分别介绍static块的这三个作用。
1. 静态变量的初始化
静态变量是在类被加载时初始化的,因此可以在static块中进行初始化操作。例如:
public class MyClass {
public static int num;
static {
num = 10;
}
在上面的例子中,当MyClass类被加载时,static块会执行,将num变量的值初始化为10。
2. 静态方法的执行
static块也可以用于执行一些静态方法,例如:
init();
public static void init() {
// 静态方法的具体实现
在上面的例子中,当MyClass类被加载时,static块会执行,执行init()方法。
3. 预处理工作
static块还可以用于做一些预处理工作,例如读取配置文件、连接数据库等。例如:
public class Config {
public static String DB_URL;
public static String USERNAME;
public static String PASSWORD;
// 读取配置文件
Properties props = new Properties();
try {
InputStream in = Config.class.getResourceAsStream("/config.properties");
props.load(in);
DB_URL = props.getProperty("db.url");
USERNAME = props.getProperty("db.username");
PASSWORD = props.getProperty("db.password");
} catch (IOException e) {
e.printStackTrace();
}
// 连接数据库
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(DB_URL, USERNAME, PASSWORD);
// ...
} catch (ClassNotFoundException | SQLException e) {
在上面的例子中,static块会读取配置文件并连接数据库。
总结
static块是一个用static关键字修饰的代码块,它可以在类被加载时执行,也可以在类被实例化之前执行。static块可以用于初始化静态变量、执行一些静态操作或者做一些预处理工作。

评论列表