logo

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. 
  • InstantionExceptionnastane, ak odovzdaná trieda neobsahuje predvolený konštruktor ako newInstance() metóda interne volá predvolený konštruktor tejto konkrétnej triedy. IllegalAccessExceptionnastane, ak nemáme prístup k definícii špecifikovanej definície triedy.

Súvisiaci článok: Reflexia v Jave