2014-11-01 172 views
1

我有2套講義。一個將構造函數作爲方法的一種形式。另一組筆記聲稱構造函數不是方法。我們可以調用一個類的構造函數嗎?

我個人覺得構造函數不是方法。但我是否正確使用invoke這個詞在constructor

我的問題是:我們可以調用java方法。但我是否正確地說「調用構造函數」?


我訪問此網站:http://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html 它看起來不恰當的使用上構造術語invoke

+5

這只是爭論的語義。但是FWIW,JLS會談到「調用構造函數」(例如http://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.8)。 – 2014-11-01 21:58:03

+0

您不像普通方法那樣調用構造函數,但是運算符'new'調用它。 – 5gon12eder 2014-11-01 22:02:14

回答

1

Merriam Webster describes invoke like this:

:提(某人或某事),企圖使人們感到某種方式或在他們的心中有一定的想法

:在支持指(東西)你的想法

:利用(法律,右等)的

所以,是的,我會說你可以調用一個反面結構很像你可以調用一個方法。但隨着the java specifcation

構造函數永遠不會被方法調用表達式調用

這樣的構造只能通過創建對象即可調用:

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

public class InvokeConstructor { 

    public InvokeConstructor() { 
     System.out.println("constructor1"); 
    } 

    public InvokeConstructor(final boolean unused) { 
     System.out.println("constructor2"); 
    } 

    public static void main(String[] args) { 
     new InvokeConstructor(); 
     new InvokeConstructor(false); 

     // And using reflection: 
     try { 
      Constructor<InvokeConstructor> constructor1 = InvokeConstructor.class.getConstructor(); 
      constructor1.newInstance(); 
      Constructor<InvokeConstructor> constructor2 = InvokeConstructor.class.getConstructor(Boolean.TYPE); 
      constructor2.newInstance(Boolean.FALSE); 
     } catch (NoSuchMethodException e) { 
      e.printStackTrace(); // TODO: implement catch 
     } catch (InvocationTargetException e) { 
      e.printStackTrace(); // TODO: implement catch 
     } catch (InstantiationException e) { 
      e.printStackTrace(); // TODO: implement catch 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); // TODO: implement catch 
     } 
    } 
} 
0

構造函數是一種方法,它具有一定的特殊權限例如- 1.我們不能使用任何返回類型作爲隱式構造函數返回對象的引用與「新」關鍵字一起。 2.該名稱應該始終與類名相同。 3.我們不能爲構造函數使用任何訪問說明符。

所以,你可以說「調用構造函數」

欲瞭解更多詳細信息,你可以參考這個鏈接 - http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html

+0

*「我們不能爲構造函數使用任何訪問說明符,因爲它隱含地是靜態的。」*這是不正確的,我沒有看到你從哪裏得到它。 – Radiodef 2014-11-02 00:15:03

相關問題