Java中的new Operator 和 newInstance()区别

Java中的new Operator 和 newInstance()区别

在Java中,new是一个操作符,而newInstance()是一个方法,两者都用于创建对象。如果知道要创建的对象类型,则可以使用new操作符,但如果不知道要创建的对象类型并在运行时传递,则会使用newInstance()方法。

一般来说,new操作符用于创建对象,但如果要确定在运行时创建的对象类型,则无法使用new操作符。在本例中,我们必须使用newInstance()方法。

让我们讨论一下新的操作符。在Java中,对象的创建按列出的3个步骤进行:对象实例化和对象初始化,以及构造函数调用。

Datatype variable; 

当我们使用new关键字时,编译器将该变量解释为一个对象

Datatype object = new Constructor();

示例:

// 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<Integer> 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 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");
    }
}

Output:

Java中的new Operator 和 newInstance()区别

输出说明:forName()方法返回我们调用newInstance()方法的类’ class ‘对象,newInstance()方法将返回我们作为命令行参数传递的类的对象。

  • 如果传递的类不存在,则会发生ClassNotFoundException异常。
  • 如果传递的类不包含默认构造函数,则会发生InstantionException,因为newInstance()方法会在内部调用特定类的默认构造函数。
  • 如果不能访问指定类定义的定义,就会发生IllegalAccessException异常。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程