Java 中的静态代码块在类被加载时,只会被执行一次,那么静态代码块具体有什么用呢?我们在使用 JDBC 访问 MySQL 数据库时,第一步首先要加载 MySQL 驱动 jar 包,第二步就要注册驱动,即调用DriverManager.registerDriver()函数,但在实际编程中,我们根本没有使用过这个函数,那注册驱动的步骤究竟是谁做的呢?我们通过查看 MySQL 5.1.49 jar 包的源码,具体文件为mysql-connector-java-5.1.49/src/com/mysql/jdbc/Driver.java

public class Driver extends NonRegisteringDriver implements java.sql.Driver {
    //
    // Register ourselves with the DriverManager
    //
    static {
        try {
            java.sql.DriverManager.registerDriver(new Driver());
        } catch (SQLException E) {
            throw new RuntimeException("Can't register driver!");
        }
    }
}

发现在类Driver中存在静态代码块,而静态代码块所做的事情就是注册驱动,因此在程序中,我们不需要手动注册驱动,只要加载Driver类即可,即Class.forName("com.mysql.jdbc.Driver");,而且 MySQL 5 之后的 jar 包,甚至还可以省略加载Driver类的步骤,因为在 jar 中存在配置文件META-INF/services/java.sql.Driver,TODO。