📜  Java中的构造函数 newInstance() 方法及示例

📅  最后修改于: 2022-05-13 01:54:58.583000             🧑  作者: Mango

Java中的构造函数 newInstance() 方法及示例

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

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

句法:

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

参数:此方法接受initargs作为参数,该参数是要作为参数传递给构造函数调用的对象数组。原始类型的值被包装在适当类型的包装对象中(例如,浮点数中的浮点数)。

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

异常:此方法抛出以下异常:

  • IllegalAccessException :如果此 Constructor 对象正在强制执行Java语言访问控制并且底层构造函数不可访问。
  • IllegalArgumentException :如果实际参数和形式参数的数量不同;如果原始参数的展开转换失败;或者,如果在可能的展开之后,参数值不能通过方法调用转换转换为相应的形参类型;如果此构造函数属于枚举类型。
  • InstantiationException :如果声明底层构造函数的类表示一个抽象类。
  • InvocationTargetException :如果底层构造函数抛出异常。
  • ExceptionInInitializerError :如果此方法引发的初始化失败。

下面的程序说明了 newInstance() 方法:
方案一:

// 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

方案二:

// 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: Java Java.lang.Object...)