2010-03-08 105 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

如果你不需要构造函数,那么你可能根本不需要实例化这个类。如果你想让这个类为你提供方法供你使用,为什么不把它变成一个静态类呢?

相关问题