new Operator vs newInstance() Mètode a Java

new Operator vs newInstance() Mètode a Java

A Java, new és un operador on newInstance() és un mètode on tots dos s'utilitzen per a la creació d'objectes. Si sabem el tipus d'objecte que s'ha de crear, podem utilitzar un operador nou, però si no sabem el tipus d'objecte que s'ha de crear al principi i es passa en temps d'execució, en aquest cas s'utilitza el mètode newInstance().
En general, l'operador new s'utilitza per crear objectes, però si volem decidir el tipus d'objecte que es crearà en temps d'execució, no hi ha manera que puguem utilitzar l'operador nou. En aquest cas hem d'utilitzar el mètode newInstance(). .

Parlem de la nou operador .  A Java, la creació d'objectes es duu a terme en 3 passos tal com s'indiquen: instanciació d'objectes i inicialització d'objectes i invocació del constructor .

Datatype   variable;    

Com utilitzarem la paraula clau nova, el compilador interpreta la variable com un objecte

Datatype   object   = new Constructor(); 

Exemple:

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

Sortida
[1 4 3] 

Nota: També el podem utilitzar amb el constructor on volíem anomenar objectes no variables.

Ara, si ens trobem amb el mètode newInstance() que està present dins del paquet java.lang dins de la classe Class. Com ja hem comentat, s'utilitza on carreguem la classe des de fonts remotes. 
Penseu en un escenari en què ens connectem a la base de dades més tard utilitzant el nostre programa java per a l'execució. Es pot explicar més evidentment amb el JDBC exemple. Recordeu que allà vam fer servir el Class.forName() mètode per carregar registres dinàmicament i allà vam utilitzar el mètode newInstance() a sobre per crear objectes dinàmicament.  

Exemple:

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

Sortida:

new Operator vs newInstance() Mètode a Java

Explicació de la sortida: forName() mètode retorna la classe ' classe' objecte al qual estem cridant nova instància() mètode que retornarà l'objecte d'aquesta classe que estem passant com a argument de línia d'ordres. 

  • Si la classe aprovada no existeix, aleshores ClassNotFoundException es produirà. 
  • InstantionException es produirà si la classe passada no conté el constructor predeterminat com nova instància() El mètode crida internament al constructor predeterminat d'aquesta classe en particular.  IllegalAccessException es produirà si no tenim accés a la definició de la definició de classe especificada.

Article relacionat: Reflexió en Java