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

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 でのリフレクション