2011-03-23 152 views
1

是否有可能在靜態代碼塊內寫入構造函數?靜態塊內的構造函數

+0

你能提供一個例子嗎? – 2011-03-23 10:37:46

+4

你爲什麼需要這個?這是真正的問題還是隻是爲了好玩? – 2011-03-23 10:38:30

+0

你想要一個靜態構造函數內的實例構造函數嗎? – Simeon 2011-03-23 10:42:33

回答

1

不,你不能那樣做。構造函數始終是非靜態的,並且您只能訪問靜態塊中的靜態字段和成員。

至於靜態塊本身,它通常用於做一些類初始化,因爲這段代碼被添加到類的每個構造函數中。

+4

靜態塊不是「添加到類的每個構造函數」 - 而是在類被加載時運行一次(在靜態上下文中)。您可能會考慮[*實例*初始化程序](http://java.sun.com/docs/books/jls/second_edition/html/classes.doc.html#246032)塊,它們就像靜態塊一樣,但沒有'static'關鍵字。 – 2011-03-23 11:22:33

+0

@Andrzej Doyle,謝謝你的改正,你說得對。 – 2011-03-23 11:33:37

+0

@Andrzej感謝你,我實際上學到了一些新東西,並且有點用處。 – PeterT 2011-03-24 09:47:38

0

不,它是不可能有靜態塊的內部構造。

1

您可以從靜態初始化程序中調用構造函數,還可以限制對該構造函數的訪問,從而只能從那裏調用該構造函數。

public class Foo { 
    static Foo singleton; 

    static { 
     singleton = new Foo(); 
    } 
    private Foo() { } 
}