Java Constructor newInstance()方法及示例

Java Constructor newInstance()方法及示例

构造函数 类的 newInstance() 方法用于创建和初始化该构造函数的一个新实例,初始化参数作为参数传递给该方法。每个参数都被解包以匹配原始的形式参数,原始参数和引用参数都要进行必要的方法调用转换。

如果构造函数的形式参数数为0,则提供的参数长度为0或空。如果构造函数正常完成,返回新创建和初始化的实例。

语法

public T newInstance(Object... initargs)
  throws InstantiationException, IllegalAccessException,
         IllegalArgumentException, InvocationTargetException

参数: 该方法接受 initargs 作为参数,它是一个对象数组,将作为参数传递给构造函数调用。原始类型的值被包裹在相应类型的封装对象中(例如 Float 中的 float)。

返回值: 该方法返回一个通过调用该对象所代表的构造函数创建的 新对象

异常: 该方法会抛出以下异常。

  • IllegalAccessException :如果这个构造函数对象正在执行Java语言的访问控制,并且底层构造函数是不可访问的。
  • IllegalArgumentException : 如果实际参数和正式参数的数量不同;如果原始参数的解包转换失败;或者在可能的解包后,参数值不能通过方法调用转换为相应的正式参数类型;如果这个构造函数涉及到一个枚举类型。
  • InstantiationException : 如果声明基础构造函数的类代表一个抽象类。
  • InvocationTargetException :如果底层构造函数抛出一个异常。
  • ExceptionInitializerError :如果该方法引发的初始化失败。

以下程序说明了newInstance()方法:

程序1 :

// Java program to demonstrate
// Constructor.newInstance() method
  
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
  
public class GFG {
  
    public static void main(String... args)
        throws InstantiationException,
               IllegalAccessException,
               IllegalArgumentException,
               InvocationTargetException
    {
  
        // An array of constructor
        Constructor[] constructor
            = Test.class.getConstructors();
  
        // Apply newInstance method
        Test sampleObject
            = (Test)constructor[0].newInstance();
  
        System.out.println(sampleObject.value);
    }
}
  
class Test {
  
    String value;
  
    public Test()
    {
        System.out.println("New Instance is created");
        value = "New Instance";
    }
}

输出:

New Instance is created
New Instance

程序2

// Java program to demonstrate
// Constructor.newInstance() method
  
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
  
public class GFG {
  
    public static void main(String... args)
        throws InstantiationException,
               IllegalAccessException,
               IllegalArgumentException,
               InvocationTargetException
    {
  
        // an array of constructor
        Constructor[] constructor
            = Test.class.getConstructors();
  
        // apply newInstance method
        Test sampleObject
            = (Test)constructor[0]
                  .newInstance("New Field");
  
        System.out.println(sampleObject.getField());
    }
}
  
class Test {
  
    private String field;
  
    public Test(String field)
    {
        this.field = field;
    }
  
    public String getField()
    {
        return field;
    }
  
    public void setField(String field)
    {
        this.field = field;
    }
}

输出:

New Field

参考资料: https://docs.oracle.com/javase/10/docs/api/java/lang/reflect/Constructor.html#newInstance(java.lang.Object…)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程