Class.forName
ドライバークラスをインスタンス化するために使用されます。
Class.forName
オブジェクトがない場合は、単にドライバー クラス インスタンスをインスタンス化します。その場合、DriverManager クラスはインスタンス化されたドライバー クラスの参照をどのように取得しますか?
3 に答える
Class.forName("X") により、X という名前のクラスが動的にロードされます。基本的に、forName("X") を呼び出すと、X という名前のクラスが初期化されます (つまり、JVM は、クラスのロード後にすべての静的ブロックを実行します)。
あなたの質問に答えるために、JVM は静的ブロックを実行し、ドライバーはそれ自体を DriverManager に登録します。
このプロセスは、次のリンクで非常によく説明されています: http://www.xyzws.com/Javafaq/what-does-classforname-method-do/17
インターフェイスについては、 javadocを参照してくださいDriver
。
それは言う、
Driver クラスがロードされると、それ自体のインスタンスを作成し、それを DriverManager に登録する必要があります。これは、ユーザーが呼び出してドライバーを読み込んで登録できることを意味します。
Class.forName("foo.bah.Driver")
javadocから
getConnectionメソッドが呼び出されると、DriverManagerは、初期化時にロードされたドライバーと、現在のアプレットまたはアプリケーションと同じクラスローダーを使用して明示的にロードされたドライバーの中から適切なドライバーを見つけようとします。
初期化時にロードされるドライバー::DriverManagerクラスは、「jdbc.drivers」システムプロパティで参照されるドライバークラスをロードしようとします。
明示的にロードされたドライバー::byClass.forName( "driver.name");