「Class.forName()」と「Class.forName().newInstance()」の違いを理解する: 包括的な説明
Java 言語には、クラスをインスタンス化するためのメソッドがいくつか用意されています。よく使用される 2 つのメソッドは、「Class.forName()」と「Class.forName().newInstance()」です。これらは類似点を共有していますが、機能には大きな違いがあります。
Class.forName()
「Class.forName()」メソッドは完全修飾メソッドを受け取ります。クラス名を引数として指定し、そのクラスを表す「Class」オブジェクトを返します。このオブジェクトは、フィールド、メソッド、コンストラクターに関する情報など、クラスに関するメタデータを提供します。ただし、実際にはクラスのインスタンスは作成されません。
Class.forName().newInstance()
対照的に、「Class.forName(). newInstance()" は、"Class.forName()" によって返された "Class" オブジェクトを受け取り、デフォルトのコンストラクターを使用して、対応するクラスの新しいインスタンスを作成しようとします。成功すると、新しく作成されたオブジェクトへの参照が返されます。 2 つのメソッドの主な違いはここにあります。「Class.forName()」は「Class」オブジェクトのみを返しますが、「Class.forName().newInstance()」は実際のインスタンスを作成します。
例:
次の Java コードを考えてみましょう:
package com.example; public class DemoClass { public DemoClass() { System.out.println("DemoClass instantiated"); } public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { // Get the Class object Class clazz = Class.forName("com.example.DemoClass"); // Create an instance DemoClass instance = (DemoClass) clazz.newInstance(); } }
このコードが実行されると、 「Class.forName("com.example.DemoClass")」は、「DemoClass」クラスに関連付けられた「Class」オブジェクトを返します。次に、「clazz.newInstance()」は「DemoClass」クラスの新しいインスタンスを作成し、そのデフォルトのコンストラクターを呼び出し、「DemoClass instantiated」を出力します。
Dynamic Class Loading:
「Class.forName()」の主な利点の 1 つは、実行時にクラスを動的にロードできることです。アプリケーションがユーザー入力または構成に基づいてクラスをインスタンス化する必要があるとします。その場合、「Class.forName()」を使用すると、そのクラスを動的にロードし、クラス名をハードコーディングせずにインスタンスを作成できます。
結論:
まとめると、「Class.forName()」と「Class.forName().newInstance()」の違いはその目的にあります。 「Class.forName()」は、クラスに関するメタデータを提供する「Class」オブジェクトを返します。対照的に、「Class.forName().newInstance()」は、従来の「new」演算子と同様に、デフォルトのコンストラクターを使用してクラスの新しいインスタンスを作成します。
以上がJavaの「Class.forName()」と「Class.forName().newInstance()」の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。