Class.forName( 'com.mysql.jdbc.Driver')がすべてを実行しています。
Class Forname Com Mysql
Class.forName( 'com.mysql.jdbc.Driver')。newInstance()(Java 9で開始されたnewInstance()は非推奨になりました)com.mysql.jdbc.Driver driver = new com.mysql.jdbc.Driver()と同等です。
Class.forName()の役割は、指定されたクラスを見つけてロードするようにJVMに要求することです。つまり、JVMはクラスの静的コードスニペットを実行します(新しいオブジェクトは作成されません)。
したがって、次のように記述することもできます。com.mysql.jdbc.Driverdriver = new com.mysql.jdbc.Driver()
Driverのソースコードを見てください:
package com.mysql.jdbc public class Driver extends NonRegisteringDriver implements java.sql.Driver { // ~ Static fields/initializers // --------------------------------------------- // // Register ourselves with the DriverManager // static { try { java.sql.DriverManager.registerDriver(new Driver()) } catch (SQLException E) { throw new RuntimeException('Can't register driver!') } } // ~ Constructors // ----------------------------------------------------------- /** * Construct a new driver and register it with DriverManager * * @throws SQLException * if a database error occurs. */ public Driver() throws SQLException { // Required for Class.forName().newInstance() } }
次の3つのルールに従います。
1.クラスの静的変数が呼び出されると、このクラスの静的コードブロックが実行されます。 [静的コードブロックのみが実行されます]
2.クラスの静的メソッドが呼び出されると、このクラスの静的コードブロックが実行されます。 [静的コードブロックのみが実行されます]
3.クラスのインスタンスを作成する場合、静的コードブロック、非静的コードブロック(コンストラクトコードブロックとも呼ばれます)、およびインスタンスを作成するための対応するコンストラクターが実行されます。
何?まだ分かりませんか?
- Class.forName( 'com.mysql.jdbc.Driver')
- String url = 'jdbc:mysql://127.0.0.1/test?useUnicode = true&characterEncoding = utf-8'
- 文字列ユーザー= ''
- 文字列psw = ''
- 接続con = DriverManager.getConnection(url、user、psw)
Class.forNameは、ドライバーが静的コードブロックのDriverManagerに登録するようにトリガーする動作です。登録後、あなたはそれを呼び出すことができます。