новий оператор проти методу newInstance() у Java

новий оператор проти методу newInstance() у Java

У Java new — це оператор, де newInstance() — метод, де обидва використовуються для створення об’єкта. Якщо ми знаємо тип об’єкта, який буде створено, тоді ми можемо використати оператор new, але якщо ми не знаємо, який тип об’єкта буде створений на початку та передається під час виконання, у цьому випадку використовується метод newInstance().
Загалом оператор new використовується для створення об’єктів, але якщо ми хочемо визначити тип об’єкта, який буде створено під час виконання, ми не можемо використати оператор new. У цьому випадку ми повинні використовувати метод newInstance(). .

Давайте обговоримо новий оператор .  У Java створення об’єкта відбувається в 3 кроки, як зазначено: створення екземпляра об’єкта та ініціалізація об’єкта виклик конструктора .

Datatype   variable;    

Оскільки ми будемо використовувати ключове слово new, компілятор інтерпретує змінну як об’єкт

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

Пояснення результату: forName() метод повертає клас ' клас' об'єкт, на який ми заїжджаємо newInstance() метод, який повертатиме об’єкт цього класу, який ми передаємо як аргумент командного рядка. 

  • Якщо переданий клас не існує, тоді ClassNotFoundException відбудеться. 
  • InstantionException відбудеться, якщо переданий клас не містить конструктора за замовчуванням as newInstance() метод внутрішньо викликає конструктор за замовчуванням цього конкретного класу.  IllegalAccessException відбудеться, якщо ми не маємо доступу до визначення зазначеного визначення класу.

Пов'язана стаття: Рефлексія в Java