ホームページ >Java >&#&チュートリアル >Java の 'Class.forName()' と 'Class.forName().newInstance()' の主な違いは何ですか?

Java の 'Class.forName()' と 'Class.forName().newInstance()' の主な違いは何ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-08 12:44:01315ブラウズ

What is the key distinction between

「Class.forName()」と「Class.forName().newInstance()」の違いを理解する

はじめに:

Java プログラミングでは、「Class.forName()」と「Class.forName().newInstance()」は、リフレクション API を処理する 2 つのメソッドです。これらは、実行時にクラスを動的にロードしてインスタンス化するために使用されます。これらのメソッドは似ているように見えますが、微妙な違いを理解することが重要です。

"Class.forName()":

メソッド "Class.forName()" は完全修飾クラス名を引数として指定し、そのクラスを表す「Class」オブジェクトを返します。これにより、クラスを動的に検索してロードできるため、コンパイル時にクラスを認識したりインポートしたりする必要がありません。返された「Class」オブジェクトを使用して、クラスの属性とメソッドを検査できます。

"Class.forName().newInstance()":

メソッド「Class.forName().newInstance()」は「Class」オブジェクトを引数として受け取り、表現されたクラスの新しいインスタンスを作成します。これはクラス名とともに「new」キーワードを使用することと同じですが、動的なインスタンス化が可能になります。戻り値はクラスのオブジェクトです。

重要な違い:

これら 2 つのメソッドの主な違いは出力にあります:

  • "Class.forName()" はクラスを表す "Class" オブジェクトを返しますmetadata.
  • "Class.forName().newInstance()" は、実際のオブジェクトであるクラスのインスタンスを返します。

例:

次のコード スニペットを考えてみましょう:

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 ドライバー: 特定のドライバー クラスをロードすることでデータベースへのランタイム接続を作成します。
  • Enterprise JavaBeans (EJB) コンテナー: コンパイル時の知識がなくてもコンポーネントを動的にロードおよび作成します。
  • サーブレット コンテナ: 受信 HTTP に基づいたサーブレットのロードとインスタンス化request.

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。