• ベストアンサー

Class.forName("org.postgresql.Driver")の意味

JDBCを使って、PostgreSQL を利用する場合、 まず最初に、Class.forName("org.postgresql.Driver")というのを使いますよね。 この、Class.forName(String str)メソッドは、str にある、クラスを初期化すると仕様書には書いてます。 (Class.forName("org.postgresql.Driver")).newInstance() を実行して、org.postgresql.Driver.class のコンストラクタを実行するというのなら、意味はわかるのですが、、、 ただClass.forName("org.postgresql.Driver")の命令だけを使ってなんの意味があるのでしょうか? 意味不明で困っています。どうか、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Harry_
  • ベストアンサー率55% (36/65)
回答No.2

Driver の実装クラスは、 static 初期化子に、自身を DriverManager に 登録する、という処理が記述されています。 static 初期化子は、そのクラスが最初にロード された時に実行されます。クラスがロードされるとは そのクラスの Class オブジェクトが生成されることで (厳密にはイコールではないですが)、 Class.forName は そのクラスの Class オブジェクトを、 クラスが未ロードならロードした上で返すメソッドです。

その他の回答 (2)

回答No.3

他の回答者と同じ内容ですが、イメージが湧きにくいですよね。 org.postgresql.DriverのようなJDBCドライバのソースには 以下のようなコードがあるのだと思ってください。 public class FooDriver implements Driver { static { FooDriver driver = new FooDriver(); DriverManager.registerDriver(driver); } .... } Class.forName("FooDriver");のようにするとJVMがFooDriverを ロードしますが、その際にstatic {}の部分を実行します。 FooDriverのインスタンスを生成して、DriverManagerに登録して いますよね。static初期化子でこのような処理を行うことは JDBCドライバ・クラスの実装での決まりごとです。

  • qazwsxe
  • ベストアンサー率20% (2/10)
回答No.1

org.postgresql.Driverというクラスを初期化すると java.sql.DriverManagerというクラスに自分を登録して 、DriverManager.getConnection()としたときに postgresのコネクションがえられるようになります。 あとは、java.sql.DriverManagerのドキュメントを読むと参考になるかもしれません。

関連するQ&A