2010-03-08 60 views
9

要使用類的方法,我需要實例化一個類。目前該類沒有構造函數(所以我想寫它)。但是,我意識到構造函數不應該做任何事情(我需要指定字段的值)。寫一個什麼都不做的構造函數可以嗎?

在這種情況下,我有一個問題,如果沒有什麼不寫就可以編寫構造函數。例如:

public Point() { 
} 
+5

爲什麼還要打擾?只是擺脫構造函數。如果/當你需要時,將其添加。 – FrustratedWithFormsDesigner 2010-03-08 21:49:41

+0

更爲奇怪的是,@Luhmann認爲具有積極成果的答案是正確的,在Java中允許使用空的構造函數,但不一定要實現它。 – 2010-03-08 22:21:57

回答

15

您不需要寫空白的結構器; Java編譯器會自動爲你插入一個(只有在你沒有定義任何其他構造函數時纔會使用一些參數)。

所以它很好(在某些情況下很有用),但它不是必需的。

+0

我會說不要插入空的構造函數,因爲你只是增加了噪音。它什麼都不做,它佔據着屏幕上的空間:-)。 – 2010-03-08 22:21:14

4

這聽起來像你明確地創建了一個不需要做的默認構造函數。如果沒有其他構造函數,默認構造函數會自動創建。

0

這樣做絕對沒問題。也許你會稍後填寫一些有用的代碼。

0

你不需要寫一個空的構造函數(因爲它是默認的),除非你有其他的構造函數的參數。

1

,什麼也不做構造函數是通過一定的語言接受的,因爲Java的默認提供一個,如果你不(JLS 8.8.9):

如果一個類不包含任何構造函數聲明,那麼默認的構造函數不需要自動提供參數。

對於默認構造函數何時可以自動提供,訪問修飾符會有什麼等等有一些限制,並且它全部在JLS中指定。

0

沒有必要指定默認(空)構造函數,因爲編譯器會自動爲它創建它。

0

當然,如果你不這樣做,編譯器會這麼做,但是因爲它是語言的一部分,所以我會去找它,除非它應該是私有的或者有參數。

0

正如其他人所提到的,在你的情況下,默認的構造函數是沒有必要的,因爲Java將創建一個默認的構造函數時你沒有定義它。但要回答你的問題,有一個空的默認構造函數是完全可以的。

另一種需要默認構造函數的情況是當你帶參數的構造函數需要被序列化時。

3

正如其他人所說,你不需要編譯它。
但是對於編碼標準,我會把它放在那裏。當通常查看一個類時,構造函數位於頂部,很高興看到會發生什麼。如果它不在那裏,開發人員就不需要在這個類中搜索它。取決於使用哪個IDE,這可能是一個痛苦。

但它真的取決於你。

+0

對於編碼標準,我並沒有真正看到它是如何有用的:它不必要地混淆了源,也沒有提供任何信息。 – 2010-03-08 22:35:23

+0

如果你的編碼標準說「把構造函數放在頂部」,那麼如果你沒有看到頂部的構造函數,爲什麼還需要搜索這個類? – 2010-03-08 22:46:24

0

如果你打算讓一個需要一個空構造函數的類以及後面的帶參數的構造函數,我會說這是一種防禦性的編碼風格,可以繼續幷包含它。由於如果有其他帶有參數的構造函數,空構造函數不會被Java放在那裏。

這就好像你有一條if語句,它只有一條語句。如果你繼續前進並在它周圍加上大括號,或者只是簡單地將一個語句縮進下面的if?那麼如果你在後面添加更多的語句,並且忘記了括號,那麼你就有一個邏輯錯誤。不妨繼續前進並放上括號,換句話說就是構造函數。

4

據我所知,一個空的構造函數的唯一實際使用是當你把它變成私有,以防止實例化類,像這樣任何人:

private Point() {}

否則,正如其他的答案都說,這純粹是一種文體選擇,從根本上說無論是哪一種方式都是無害的。

0

如果你不需要構造函數,那麼你可能根本不需要實例化這個類。如果你想讓這個類爲你提供方法供你使用,爲什麼不把它變成一個靜態類呢?

相關問題