java.lang.reflect.Constructor.newInstance() 方法示例



描述

java.lang.reflect.Constructor.newInstance(Object... initargs) 方法使用此 Constructor 物件表示的建構函式來建立和初始化建構函式宣告類的新的例項,並使用指定的初始化引數。各個引數會自動解包以匹配原始形式引數,原始引數和引用引數都會根據需要進行方法呼叫轉換。

宣告

以下是 java.lang.reflect.Constructor.newInstance(Object... initargs) 方法的宣告。

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

引數

initargs − 要作為引數傳遞給建構函式呼叫的物件的陣列;原始型別的值封裝在相應型別的包裝物件中(例如,浮點數在 Float 中)。

返回值

透過呼叫此物件表示的建構函式建立的新物件。

異常

  • IllegalAccessException − 如果此 Constructor 物件正在強制執行 Java 語言訪問控制,並且底層建構函式不可訪問。

  • IllegalArgumentException − 如果實際引數和形式引數的數量不同;如果原始引數的解包轉換失敗;或者,在可能的解包之後,引數值無法透過方法呼叫轉換轉換為相應的形式引數型別;如果此建構函式與列舉型別有關。

  • InstantiationException − 如果宣告底層建構函式的類表示抽象類。

  • InvocationTargetException − 如果底層建構函式丟擲異常。

  • ExceptionInInitializerError − 如果此方法引發的初始化失敗。

示例

以下示例演示了 java.lang.reflect.Constructor.newInstance(Object... initargs) 方法的用法。

package com.tutorialspoint;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class ConstructorDemo {
   public static void main(String[] args) throws NoSuchMethodException, 
         SecurityException, InstantiationException, IllegalAccessException, 
         IllegalArgumentException, InvocationTargetException {
      Constructor constructor = SampleClass.class.getConstructor(String.class);
      SampleClass sampleObject = (SampleClass)constructor.newInstance("data");
      System.out.println(sampleObject.getSampleField());
   }
}

class SampleClass {
   private String sampleField;
   
   public SampleClass(){
   }

   public SampleClass(String sampleField){
      this.sampleField = sampleField;
   }

   public String getSampleField() {
      return sampleField;
   }

   public void setSampleField(String sampleField) {
      this.sampleField = sampleField;
   } 
}

讓我們編譯並執行上述程式,這將產生以下結果:

data
java_reflect_constructor.htm
廣告
© . All rights reserved.