logo

naujas Operator vs newInstance() metodas Java

Java programoje new yra operatorius, kur newInstance() yra metodas, kai abu naudojami objektams kurti. Jei žinome kuriamo objekto tipą, galime naudoti naują operatorių, bet jei nežinome objekto, kurį reikia sukurti pradžioje, tipo ir perduodamas vykdymo metu, tokiu atveju naudojamas newInstance() metodas.
Paprastai naujas operatorius naudojamas objektams kurti, bet jei norime nuspręsti, kokio tipo objektas bus kuriamas vykdymo metu, jokiu būdu negalime naudoti naujo operatoriaus. Šiuo atveju turime naudoti newInstance() metodas .

Leiskite aptarti naujas operatorius .  Java objektų kūrimas vyksta 3 etapais, kaip nurodyta: objekto paleidimas ir objekto inicijavimas ir konstruktoriaus iškvietimas .

Datatype   variable;   

Kadangi naudosime naują raktinį žodį, kompiliatorius interpretuoja kintamąjį kaip objektą

Datatype   object   = new Constructor();

Pavyzdys:

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

Išvestis
[1 4 3]

Pastaba: Taip pat galime naudoti su konstruktoriumi, kai norėjome vadinti objektą, o ne kintamuosius.

Dabar, jei sugalvosime newInstance() metodą, kuris yra java.lang pakete Class klasėje. Kaip jau aptarėme, jis naudojamas, kai įkeliame klasę iš nuotolinių šaltinių. 
Apsvarstykite scenarijų, kai vėliau prisijungsime prie duomenų bazės naudodami mūsų „Java“ programą. Tai galima aiškiau paaiškinti su JDBC pavyzdys. Prisiminkite, kad ten mes naudojome Class.forName() dinamiškai įkelti registrus, o mes panaudojome newInstance() metodą, kad sukurtume objektus dinamiškai.  

Pavyzdys:

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

Išvestis:

naujas Operator vs newInstance() metodas Java

Išvesties paaiškinimas: forName() metodas grąžina klasę klasė' objektas, į kurį kreipiamės newInstance() metodas, kuris grąžins tos klasės objektą, kurį perduodame kaip komandinės eilutės argumentą. 

  • Jei išlaikytos klasės nėra, tada ClassNotFoundException atsiras. 
  • InstantionExceptionįvyks, jei perduotoje klasėje nėra numatytojo konstruktoriaus kaip newInstance() metodas viduje iškviečia numatytąjį tos konkrečios klasės konstruktorių. IllegalAccessExceptionįvyks, jei neturėsime prieigos prie nurodytos klasės apibrėžimo.

Susijęs straipsnis: „Java“ atspindys