[英]Are constructors in Java static in nature or non-static in nature?
這是Java規范在第8.8.3節中關於構造函數的內容。 構造函數修飾符 :
不同於方法,構造函數不能是
abstract
,static
,final
,native
,strictfp
,或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.