nový operátor vs metóda newInstance() v jazyku Java

nový operátor vs metóda newInstance() v jazyku Java

V Jave je new operátor, kde newInstance() je metóda, kde sa na vytváranie objektov používajú obe. Ak poznáme typ objektu, ktorý sa má vytvoriť, môžeme použiť operátor new, ale ak nepoznáme typ objektu, ktorý sa má vytvoriť na začiatku a ktorý sa odovzdáva za behu, použije sa metóda newInstance().
Vo všeobecnosti sa operátor new používa na vytváranie objektov, ale ak chceme rozhodnúť o type objektu, ktorý sa má vytvoriť za behu, nie je možné použiť operátor new. V tomto prípade musíme použiť metóda newInstance(). .

Poďme diskutovať o nového operátora .  V Java sa vytváranie objektov uskutočňuje v 3 krokoch, ako je uvedené: inštancia objektu a inicializácia objektu a vyvolanie konštruktora .

Datatype   variable;    

Keďže budeme používať kľúčové slovo new, kompilátor interpretuje premennú ako objekt

Datatype   object   = new Constructor(); 

Príklad:

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

Výstup
[1 4 3] 

Poznámka: Môžeme ho použiť aj s konštruktorom, kde sme chceli volať objekt, nie premenné.

Teraz, ak prídeme na metódu newInstance(), ktorá je prítomná v balíku java.lang v triede Class. Ako sme už diskutovali, používa sa tam, kde načítavame triedu zo vzdialených zdrojov. 
Zvážte scenár, v ktorom sa neskôr pripojíme k databáze pomocou nášho programu Java na vykonanie. Zreteľnejšie sa to dá vysvetliť pomocou JDBC príklad. Pamätajte, že sme tam použili Class.forName() metódu na dynamické načítanie registrov a tam sme nad ňou použili metódu newInstance() na dynamické vytváranie objektov.  

Príklad:

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

výstup:

nový operátor vs metóda newInstance() v jazyku Java

Vysvetlenie výstupu: forName() metóda vráti triedu ' trieda objekt, na ktorý voláme newInstance() metóda, ktorá vráti objekt tejto triedy, ktorý odovzdávame, ako argument príkazového riadka. 

  • Ak odovzdaná trieda neexistuje, potom ClassNotFoundException dôjde. 
  • InstantionException nastane, ak odovzdaná trieda neobsahuje predvolený konštruktor ako newInstance() metóda interne volá predvolený konštruktor tejto konkrétnej triedy.  IllegalAccessException nastane, ak nemáme prístup k definícii špecifikovanej definície triedy.

Súvisiaci článok: Reflexia v Jave