Class.forName()の使い方
Class.forName()はJavaリフレクションメカニズムの一つで、クラスの完全修飾名(パッケージ名とクラス名を含む)に基づきクラスを動的にロードし、対応するClassオブジェクトを返します。
その使い方は次のとおりです。
- クラスの取得: `Class.forName(String className)`
指定されたクラス名に対応する Class オブジェクトを返します。クラスが存在しないかアクセスできない場合は、ClassNotFoundException 例外がスローされます。
- クラス名、初期化フラグ、およびクラスローダを引数とするClass.forName(String className, boolean initialize, ClassLoader loader)静的メソッド
指定したクラス名のほかに、引数2つ目でクラスの初期化を行うか指定することができ、引数3つ目でクラスローダが指定可能です。
Class.forName()メソッドを用いてクラスをロードすると、そのクラスに関する様々な情報をClassオブジェクトから取得できます。たとえば、クラス名、パッケージ名、メソッド、フィールドなどです。また、オブジェクトの作成やメソッドの呼び出しにも使用できます。
Class.forName()メソッドは次のシナリオによく使用されます。
- 実行時に条件によってロードすべきクラスを決定すること。
- JDBCでデータベースに接続する際には、Class.forName()メソッドを使用してデータベースドライバをロードします。
- 設定ファイルに記載されたクラスのロード:設定ファイルにロードするクラス名を指定し、Class.forName()メソッドを使ってクラスをロードします。
Java 9以降ではClass.forName(String className)の代替メソッドであるClass.forName(String className, boolean initialize, ClassLoader loader)を利用するのが推奨されています。
というのは、新しいバージョンでは、Class.forName(String className)メソッドは非推奨と定義され、常にnullを返すからです。