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.クラスのインスタンスを作成する場合、静的コードブロック、非静的コードブロック(コンストラクトコードブロックとも呼ばれます)、およびインスタンスを作成するための対応するコンストラクターが実行されます。

何?まだ分​​かりませんか?

  1. Class.forName( 'com.mysql.jdbc.Driver')
  2. String url = 'jdbc:mysql://127.0.0.1/test?useUnicode = true&characterEncoding = utf-8'
  3. 文字列ユーザー= ''
  4. 文字列psw = ''
  5. 接続con = DriverManager.getConnection(url、user、psw)

Class.forNameは、ドライバーが静的コードブロックのDriverManagerに登録するようにトリガーする動作です。登録後、あなたはそれを呼び出すことができます。