Java の new Operator と newInstance() メソッドの比較
Java では、new は演算子であり、newInstance() は両方ともオブジェクトの作成に使用されるメソッドです。作成されるオブジェクトのタイプがわかっている場合は new 演算子を使用できますが、最初に作成されるオブジェクトのタイプがわからず、実行時に渡される場合は、 newInstance() メソッドが使用されます。
一般に、new 演算子はオブジェクトの作成に使用されますが、実行時に作成されるオブジェクトのタイプを決定したい場合は、new 演算子を使用する方法はありません。この場合、使用する必要があります newInstance() メソッド 。
について話し合いましょう 新しいオペレーター 。 Java では、オブジェクトの作成は、リストにあるように、オブジェクトのインスタンス化とオブジェクトの初期化の 3 つのステップで行われます。 コンストラクターの呼び出し 。
Datatype variable;
new キーワードを使用するため、コンパイラは変数をオブジェクトとして解釈します。
Datatype object = new Constructor();
例:
Java // Java Program to Illustrate new Operator // Importing required classes import java.util.* ; // Main class class GFG { // Main drive method public static void main ( String [] args ) { // List al; // Ny now al is just a variable // Now creating object using new operator List < Integer > al = new ArrayList <> (); // Adding elements to above List al . add ( 1 ); al . add ( 4 ); al . add ( 3 ); // Printing elements of List System . out . print ( al ); } }
出力
[1 4 3]
注記: 変数ではなくオブジェクトを呼び出したい場合は、コンストラクターでも使用できます。
ここで、Class クラス内の java.lang パッケージ内に存在する newInstance() メソッドを思いついたとします。すでに説明したように、リモート ソースからクラスをロードする場合に使用されます。
後で Java プログラムを実行してデータベースに接続するシナリオを考えてみましょう。それは次のようにしてより明確に説明できます。 JDBC 例。そこで使用したことを思い出してください Class.forName() メソッドを使用してレジスタを動的にロードし、その上で newInstance() メソッドを使用してオブジェクトを動的に作成しました。
例:
Java // Java Program to Demonstrate Working of newInstance() // Method present inside java.lang.Class // Class 1 // Class 2 class A { int a ; } class B { int b ; } // Class 3 // Main class public class GFG { // Method 1 // To create an instance of class whose name is // passed as a string 'c'. public static void fun ( String c ) throws InstantiationException IllegalAccessException ClassNotFoundException { // Creating an object of type 'c' Object obj = Class . forName ( c ). newInstance (); // Printing the type of object created System . out . println ( 'Object created for class:' + obj . getClass (). getName ()); } // Method 2 // Main driver method public static void main ( String [] args ) throws InstantiationException IllegalAccessException ClassNotFoundException { // Calling above method over 'A' fun ( 'A' ); } }
出力:
出力の説明: forName() 方法 クラス ' を返します クラス' 呼び出しているオブジェクト newInstance() コマンドライン引数として渡したクラスのオブジェクトを返すメソッド。
- 渡されたクラスが存在しない場合は、 クラスが見つかりません例外 が発生します。
関連記事: Java でのリフレクション