нов оператор срещу метод newInstance() в Java

нов оператор срещу метод newInstance() в Java

В Java new е оператор, където newInstance() е метод, при който и двата се използват за създаване на обект. Ако знаем типа на обекта, който ще бъде създаден, тогава можем да използваме нов оператор, но ако не знаем типа на обекта, който да бъде създаден в началото и се предава по време на изпълнение, в този случай се използва методът newInstance().
По принцип операторът new се използва за създаване на обекти, но ако искаме да решим типа обект, който да бъде създаден по време на изпълнение, няма начин да използваме оператор new. В този случай трябва да използваме метод newInstance(). .

Нека обсъдим нов оператор .  В Java създаването на обект се извършва в 3 стъпки, както са изброени: инстанциране на обект и инициализация на обект и извикване на конструктор .

Datatype   variable;    

Тъй като ще използваме новата ключова дума, компилаторът интерпретира променливата като обект

Datatype   object   = new Constructor(); 

Пример:

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

Изход
[1 4 3] 

Забележка: Можем да го използваме и с конструктор, където искахме да извикаме обект, а не променливи.

Сега, ако измислим метод newInstance(), който присъства в пакета java.lang в класа Class. Както вече обсъдихме, той се използва, когато зареждаме класа от отдалечени източници. 
Помислете за сценарий, при който се свързваме с базата данни по-късно, използвайки нашата java програма за изпълнение. По-очевидно може да се обясни с JDBC пример. Спомнете си, че там използвахме Class.forName() метод за динамично зареждане на регистрите и там използвахме метода newInstance() върху него, за да създаваме динамично обекти.  

Пример:

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

Изход:

нов оператор срещу метод newInstance() в Java

Обяснение на изхода: заИме() метод връща класа ' клас обект, на който се обаждаме newInstance() метод, който ще върне обекта от този клас, който предаваме като аргумент на командния ред. 

  • Ако преминалият клас не съществува тогава ClassNotFoundException ще се случи. 
  • InstantionException ще възникне, ако предаваният клас не съдържа конструктора по подразбиране като newInstance() метод вътрешно извиква конструктора по подразбиране на този конкретен клас.  IllegalAccessException ще възникне, ако нямаме достъп до дефиницията на посочената дефиниция на клас.

Свързана статия: Отражение в Java