Java: JDBCドライバをClass.forNameメソッドでロードすることの意味が分からなかったので調べた
疑問1
なぜ"com.mysql.jdbc.Driver"をforNameメソッドでロードするのか?
import宣言ではダメなのか?
調査結果
- おそらく、JDBCドライバは古いJavaの標準クラスライブラリ(?)には含まれていないため、importすらできないと思われる。
- forNameメソッドはJDBCドライバのインスタンスを作るのではなく、拡張子が『.class』の一般的なクラスファイルと同じく、JVMがファイルを読み込んだ状態にするものらしい。
参照: Class.forName()とnewの違い(JDBCでClass.forNameを使う理由)|あなたに送る独り言byはむばね
疑問2
ならば、なぜ『ファイルを読み込んだ状態(ロード)』だけでドライバを使えるようになるのか?
new演算子でインスタンス化しなくていいのか?
調査結果
- ロード時にstaticイニシャライザ(static初期化子)が実行され、その中でドライバがインスタンス化されている。
参照: Class.forName で DB アクセスできるようになる理由 - すぱいだー日記。
なお、JDBC4.0からはforNameメソッドでロードせずに使えるようになったそうです。