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

2019-10-16 22:49:15

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中的float)

返回值

  • 通過呼叫此物件代表的建構函式建立的新物件。

例外/異常

  • IllegalAccessException - 如果此構造方法物件正在強制執行Java語言存取控制,並且底層建構函式無法存取。
  • IllegalArgumentException - 如果實際和形式引數的數量不同; 如果原始引數的解包轉換失敗; 或者如果在可能的展開之後,通過方法呼叫轉換,引數值不能轉換為相應的形式引數型別; 如果此建構函式屬於列舉型別。
  • InstantiationException - 如果宣告底層建構函式的類表示抽象類。
  • InvocationTargetException - 如果底層建構函式引發異常。
  • ExceptionInInitializerError - 如果由此方法引發的初始化失敗。

例子

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

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

public class NewInstance {
   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;
   } 
}

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

false

以下是糾正/補充內容:

輸出值為data而不是false-------------------------------------------------------------------------------------------------------------------------------------------------------------------------  提交時間:2019-09-20