logo

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');  } } 

出力:

Java の new Operator と newInstance() メソッドの比較

出力の説明: forName() 方法 クラス ' を返します クラス' 呼び出しているオブジェクト newInstance() コマンドライン引数として渡したクラスのオブジェクトを返すメソッド。 

  • 渡されたクラスが存在しない場合は、 クラスが見つかりません例外 が発生します。 
  • インスタンション例外渡されたクラスにデフォルトのコンストラクターが含まれていない場合に発生します。 newInstance() メソッドは、その特定のクラスのデフォルトのコンストラクターを内部的に呼び出します。 不正アクセス例外指定されたクラス定義の定義にアクセスできない場合に発生します。

関連記事: Java でのリフレクション