logo

new Operator vs newInstance() metoda v Javě

V Javě je new operátor, kde newInstance() je metoda, kde se oba používají pro vytváření objektů. Pokud známe typ objektu, který má být vytvořen, můžeme použít nový operátor, ale pokud neznáme typ objektu, který má být vytvořen na začátku a je předán za běhu, v tom případě se použije metoda newInstance().
Obecně se operátor new používá k vytváření objektů, ale pokud chceme určit typ objektu, který se má vytvořit za běhu, neexistuje způsob, jak použít nový operátor. V tomto případě musíme použít metoda newInstance(). .

Pojďme diskutovat o nového operátora .  V Javě se vytváření objektů provádí ve 3 krocích, jak je uvedeno: konkretizace objektu a inicializace objektu a vyvolání konstruktoru .

Datatype   variable;   

Protože budeme používat klíčové slovo new, kompilátor interpretuje proměnnou jako objekt

Datatype   object   = new Constructor();

Pří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 jej použít i s konstruktorem, kde jsme chtěli volat objekt, nikoli proměnné.

Nyní, když přijdeme na metodu newInstance(), která je přítomna v balíčku java.lang ve třídě Class. Jak jsme již probrali, používá se tam, kde načítáme třídu ze vzdálených zdrojů. 
Zvažte scénář, kdy se později připojíme k databázi pomocí našeho programu Java. Jasněji to lze vysvětlit pomocí JDBC příklad. Pamatujte, že jsme tam použili Class.forName() metoda k dynamickému načítání registrů a tam jsme nad ní použili metodu newInstance() k dynamickému vytváření objektů.  

Pří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:

new Operator vs newInstance() metoda v Javě

Vysvětlení výstupu: forName() metoda vrátí třídu ' Třída' objekt, na který voláme newInstance() metoda, která vrátí objekt této třídy, který předáváme, jako argument příkazového řádku. 

  • Pokud předaná třída neexistuje, pak ClassNotFoundException dojde. 
  • InstantionExceptiondojde, pokud předaná třída neobsahuje výchozí konstruktor jako newInstance() metoda interně volá výchozí konstruktor této konkrétní třídy. IllegalAccessExceptiondojde, pokud nemáme přístup k definici zadané definice třídy.

Související článek: Reflexe v Javě