Ele a registra porque carrega a classe na memória e executa os inicializadores estáticos da classe. O código inicializador estático então chama a estrutura JDBC para dizer "Olá, sou um driver JDBC" (chamando
DriverManager.registerDriver
). Por exemplo, a classe do driver parecerá vagamente assim:
package com.example.jdbc;
import java.sql.DriverManager;
public class Driver implements java.sql.Driver {
static {
DriverManager.registerDriver(new Driver());
}
// ...implementation...
}
Então, quando você faz
Class.forName("com.example.jdbc.Driver")
, ele carrega a classe e executa o inicializador estático, que cria uma instância e a registra com o DriverManager
. Devo observar que como Andreas diz , os drivers JDBC modernos não precisam que você faça isso.