logo

новий оператор проти методу 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