naujas Operator vs newInstance() metodas Java

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