この記事では、Java の new と newInstance の違いについて説明します。困っている友人は参考にしていただければ幸いです。
クラスを初期化してインスタンスを生成する場合、newInstance() と new の違いは何ですか?
newInstance の使用と new の使用には違いがあります。違いは次のとおりです。前者 クラスロード機構を使用するのに、なぜオブジェクトの作成方法が 2 つあるのか、これをスケーラビリティ、拡張性、再利用性などのソフトウェアの観点から説明する必要があります。
Java のファクトリ モードではオブジェクトの作成に newInstance がよく使用されるため、ファクトリ モードを使用する必要がある理由についても具体的な答えを見つけることができます。
例:
Class c = Class.forName(“A”); factory = (AInterface)c.newInstance();
ここで、AInterface は A のインターフェイスです。 このように書くと理解できるかもしれません:
String className = “A”; Class c = Class.forName(className); factory = (AInterface)c.newInstance();
さらに、以下のように書くと、 , あなたは理解できるでしょう あなたは理解できるでしょう:
String className = readfromXMlConfig;//从xml 配置文件中获得字符串 Class c = Class.forName(className); factory = (AInterface)c.newInstance();
上記のコードはクラス A の名前を削除します。 利点: クラス A がどのように変更されても、上記のコードは変更されず、A の兄弟を置き換えることもできます。 Ainterface を継承している限り、クラス B、C、D... など。
jvm の観点から見ると、new を使用する場合、新しいクラスをロードする必要はありません。
ただし、newInstance を使用する場合は、次のことを確認する必要があります。
1.このクラスはロード中です。このクラスは接続されています。上記の 2 つの手順を完了するのは、クラスの静的メソッド forName() メソッドです。この静的メソッドは、起動クラス ローダー (つまり、Java API をロードするローダー) を呼び出します。
JVM についての上記の理解により、newInstance は実際には新しいメソッドを 2 つのステップに分解すると言えます。つまり、最初にクラス ロード メソッドを呼び出して特定のクラスをロードし、次にそれをインスタンス化します。
この段階的なアプローチの利点は明らかです。クラスの静的読み込みメソッド forName を呼び出すときの柔軟性が向上し、分離の手段が提供されます。
[補足:]
new: 強力な型指定。比較的効率的です。任意のパブリック コンストラクターを呼び出すことができます。
newInstance() は、IOC、リフレクション、インターフェイス指向プログラミング、依存関係の反転などの技術的なメソッドを実装する場合に避けられない選択肢です。 new は特定のクラスのインスタンス化のみを実装できるため、インターフェイス プログラミングには適していません。
オブジェクトは、このクラスのデフォルト コンストラクターを通じて構築されます。デフォルト コンストラクターにアクセスする権限がない場合は、InstantiationException がスローされます。
new と newInstance は同じ効果があることがわかります。
以上がJavaのnewとnewInstanceの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。