new Operator vs metoda newInstance() în Java

new Operator vs metoda newInstance() în Java

În Java, new este un operator în care newInstance() este o metodă în care ambele sunt folosite pentru crearea obiectelor. Dacă știm tipul de obiect care urmează să fie creat, atunci putem folosi un nou operator, dar dacă nu știm tipul de obiect care urmează să fie creat la început și este trecut la timpul de execuție, în acest caz se folosește metoda newInstance().
În general, operatorul nou este folosit pentru a crea obiecte, dar dacă dorim să decidem tipul de obiect care urmează să fie creat în timpul execuției, nu putem folosi operatorul nou. În acest caz, trebuie să folosim metoda newInstance(). .

Să discutăm despre nou operator .  În Java, crearea obiectelor are loc în 3 pași, așa cum sunt enumerați: instanțierea obiectului și inițializarea obiectului și invocarea constructorului .

Datatype   variable;    

Pe măsură ce vom folosi noul cuvânt cheie, compilatorul interpretează variabila ca un obiect

Datatype   object   = new Constructor(); 

Exemplu:

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

Ieșire
[1 4 3] 

Nota: Îl putem folosi și cu constructor acolo unde am vrut să numim obiect nu variabile.

Acum, dacă venim cu metoda newInstance() care este prezentă în pachetul java.lang în clasa Class. După cum am discutat deja, este folosit în cazul în care încărcăm clasa din surse de la distanță. 
Luați în considerare un scenariu în care ne conectăm la baza de date mai târziu folosind programul nostru java pentru execuție. Poate fi explicat mai evident cu JDBC exemplu. Amintiți-vă că acolo am folosit Class.forName() metoda pentru a încărca registrele în mod dinamic și acolo am folosit metoda newInstance() pe deasupra pentru a crea obiecte în mod dinamic.  

Exemplu:

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

Ieșire:

new Operator vs metoda newInstance() în Java

Ieșire Explicație: forName() metodă returnează clasa " Clasă' obiectul pe care facem apel newInstance() metoda care va returna obiectul acelei clase pe care o transmitem ca argument de linie de comandă. 

  • Dacă clasa trecută nu există atunci ClassNotFoundException va avea loc. 
  • InstantionException va apărea dacă clasa trecută nu conține constructorul implicit ca newInstance() metoda apelează intern constructorul implicit al acelei clase particulare.  IllegalAccessException va apărea dacă nu avem acces la definiția definiției clasei specificate.

Articol înrudit: Reflecție în Java