簡體   English   中英

Java中的構造函數是靜態的還是非靜態的?

[英]Are constructors in Java static in nature or non-static in nature?

還有一個類似的問題, 構造函數是靜態的還是非靜態的

但是很少有答案說構造函數是靜態的,很少有人說構造函數是非靜態的。 這很混亂。 那么,誰能澄清構造函數是靜態的還是非靜態的?

這是Java規范在第8.8.3節中關於構造函數的內容。 構造函數修飾符

不同於方法,構造函數不能是abstractstaticfinalnativestrictfp ,或synchronized

  • 構造函數不會繼承,因此無需將其聲明為final

  • abstract構造函數永遠無法實現。

  • 始終會針對某個對象調用構造函數,因此將構造函數設為static沒有意義。

  • 實際上不需要synchronized構造函數,因為它會鎖定正在構造的對象,通常在該對象的所有構造函數完成工作之前,其他線程無法使用該對象。

  • 缺少native造函數是一種任意的語言設計選擇,它使Java虛擬機的實現易於驗證在創建對象期間始終正確調用了超類構造函數。

  • 無法將構造函數聲明為strictfp (與方法(第8.4.3節 )相反)是一種有意的語言設計選擇。 它有效地確保構造函數在且僅當其類是FP-strict時才是FP-strict的(第15.4節 )。

我不確定哪個答案讓您感到困惑。 但是在Java中,構造函數不是靜態的。

請參見以下示例:

public class MyTest {
    public static void main(String[] args) {
        new Test(); // Prints reference within the constructor
        new Test(); // The reference is different here
    }
}

class Test {
    public Test() {
        System.out.println(this.toString());
    }
}

如您所見,通過兩次調用構造函數,可以得到對該對象的兩個不同引用。 這意味着構造函數的上下文不是靜態的。

您的類中可能有工廠方法,這些方法是靜態的並創建實例:

類測試{

// May be called like Test.create() and returns instance
public static Test create() {
    return new Test();
}

但是在這些方法中,您仍然必須調用類構造函數。 正如我之前演示的那樣,這不是靜態的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM