2011-08-01 42 views

回答

12

如果您制作所有的构造函数private,那么该类将不再可扩展。

public class TestName { 

    private TestName(){do something} 

} 

想知道为什么,检查节3.4.4.1,'The default constructor'。通过声明你的私人默认的构造函数,该段的最后一句成立:

这样的[私人]构造函数永远不能从类之外调用,但它防止了默认构造函数的自动插入。

通过在超类中声明一个不可访问的构造函数非常有效,您的子类可以调用没有(其他)构造函数,因此Java会阻止编译。

+0

如果您仍然需要公共构造函数的替代方法,那么可以添加一个静态方法,该方法使用私有构造函数返回一个新对象: – pvoosten

+0

@emboss能解释为什么使构造函数为私有使其不可扩展 – RMT

+2

子类中的每个构造函数都必须调用超级构造函数。如果不是,则使用隐式构造函数。使所有超级构造函数都是私有的(包括隐含的)将导致编译错误。 – Vlad

3

如果构造函数由于在“// do something”注释中插入代码而失败,则抛出异常。

其他选项 - 最终类或私有构造函数 - 通常是更好的选择,因为它们在编译时报告错误,而不是运行时。但是如果失败应该是有条件的,或者如果有人正在测试你的知识,那么抛出异常是通常的方法。

[专家的问题:如果构造函数抛出一个异常,程序是否还有任何方式可以结束对新创建的实例的引用? (提示:是。)]

+1

如果可以的话,我会给你+10的真棒专家问题。谢谢,杰夫。 – Raku

0

您可以制作该类的私有构造函数。

相关问题