0

この情報源から、私はそれを読みました:

JDBC ドライバーを扱った経験があるかもしれません。たとえば、クラスローダは「org.gjt.mm.mysql」パッケージの Driver クラスをロードしてリンクしようとします。成功した場合、静的初期化子が呼び出されます。

Class.forName("org.gjt.mm.mysql.Driver"); 
Connection con = DriverManager.getConnection(url,"myLogin", "myPassword"); 

ドライバーをメモリにロードするために Class.forName() が必要な理由を見てみましょう。すべての JDBC ドライバーには、それ自体を DriverManager に登録する静的ブロックがあり、DriverManager には静的な初期化子のみがあります。

MySQL JDBC ドライバーには、次のような静的初期化子があります。

 static {
     try {
         java.sql.DriverManager.registerDriver(new Driver());
     } catch (SQLException E) {
         throw new RuntimeException("Can't register driver!");
     } }

これは、DriverManager が Singleton クラスであることを意味しますか?

4

1 に答える 1

5

シングルトンではありません。これは、静的メソッドのみを備えた純粋なユーティリティ クラスです。このクラスのインスタンスは 0 です。シングルトンにはクラスのインスタンスが 1 つあり、このインスタンスにアクセスしてインスタンス メソッドを呼び出すことができます。

Java は文書化されており、オープンソースです。クラスのソースを見ると、それがどのように機能するかを理解できます。

于 2013-04-19T22:41:42.543 に答える