はじめに:
Java プログラミングでは、「Class.forName()」と「Class.forName().newInstance()」は、リフレクション API を処理する 2 つのメソッドです。これらは、実行時にクラスを動的にロードしてインスタンス化するために使用されます。これらのメソッドは似ているように見えますが、微妙な違いを理解することが重要です。
"Class.forName()":
メソッド "Class.forName()" は完全修飾クラス名を引数として指定し、そのクラスを表す「Class」オブジェクトを返します。これにより、クラスを動的に検索してロードできるため、コンパイル時にクラスを認識したりインポートしたりする必要がありません。返された「Class」オブジェクトを使用して、クラスの属性とメソッドを検査できます。
"Class.forName().newInstance()":
メソッド「Class.forName().newInstance()」は「Class」オブジェクトを引数として受け取り、表現されたクラスの新しいインスタンスを作成します。これはクラス名とともに「new」キーワードを使用することと同じですが、動的なインスタンス化が可能になります。戻り値はクラスのオブジェクトです。
重要な違い:
これら 2 つのメソッドの主な違いは出力にあります:
例:
次のコード スニペットを考えてみましょう:
Class clazz = Class.forName("test.Demo"); Demo demo = (Demo) clazz.newInstance();
この例では、 「Class.forName()」メソッドは「Demo」クラスをロードし、それを表す「Class」オブジェクトを返します。 「clazz」変数がこのオブジェクトを参照するようになりました。
その後、「clazz.newInstance()」メソッドが「Demo」クラスの新しいインスタンスを作成します。結果は「demo」変数に割り当てられ、これにはタイプ「Demo」の実際のオブジェクトが含まれます。
アプリケーション:
「クラス」を使用した動的ロードとインスタンス化.forName() と Class.forName().newInstance() にはさまざまな機能がありますアプリケーション:
JDBC ドライバーの例:
Class.forName("org.h2.Driver"); // Load the H2 JDBC driver Connection connection = DriverManager.getConnection("jdbc:h2:mem:test"); // Create a connection
この例では、「Class.forName()」メソッドを使用して H2 ドライバーを動的にロードします。 JDBCドライバー。これにより、「DriverManager」クラスを使用してメモリ内データベースへの接続を確立できるようになります。
以上がJava の "Class.forName()" と "Class.forName().newInstance()" の主な違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。