抛出默认构造函数java的异常

时间:2013-10-21 14:30:54

标签: java class oop constructor

如何防止在Java中使用默认构造函数?

在我的评估中说:

"We don't want the user to use the default constructor since the user has to specify the HashCode, and maximum load factor"

我认为这可以解决问题,但显然不是(字典是用于抛出异常的类):

public boolean HashDictionary() throws DictionaryException {}

DictionaryException类:

public class DictionaryException extends Throwable {

}

测试以确保在使用默认构造函数时抛出异常(由讲师提供):

try
{
    HashDictionary h = new HashDictionary();
    System.out.println("***Test 1 failed");

}
catch (DictionaryException e) {
        System.out.println("   Test 1 succeeded");
}

我只是想知道如何做到这一点,因为我不熟悉这样做的方法。感谢。

7 个答案:

答案 0 :(得分:4)

如果您不希望调用它,可以将默认声明声明为私有。

要回答您的评论,您可以抛出异常 -

public HashDictionary() throws DictionaryException {
    throw new DictionaryException("Default constructor is not allowed.");
}

答案 1 :(得分:2)

你可以

a)省略默认构造函数

b)将默认构造函数设为私有

c)使用默认构造函数时抛出异常

public HashDictionary() throws DictionaryException {
    throw new DictionaryException("Default constructor should not be used!");
}

答案 2 :(得分:1)

不要那样做。只需将默认构造函数设为私有:

private HashDictionary() {}

编辑:构造函数定义中boolean做了什么?我刚刚复制了它......

答案 3 :(得分:0)

如果您不希望用户使用默认构造函数,您可以省略构造函数,如果声明了其他非默认构造函数,或者您可以创建默认构造函数private

您可能遇到的另一个问题是您在问题中提出的声明不是构造函数,而是一种方法。构造函数没有返回类型。

更改此

public boolean HashDictionary() throws DictionaryException {}

到这个

public HashDictionary() throws DictionaryException {}

更好,只需将其更改为

private HashDictionary() {}

然后没有人可以在课堂外访问它。

答案 4 :(得分:0)

我最后添加了这个:

 public DictionaryException(String error_string)
 {
     System.out.println(error_string);
 }

作为DictionaryException的默认构造函数

然后:

public HashDictionary() throws DictionaryException {
    throw new DictionaryException("Default constructor should not be used!");
}

对于HashDictionary的默认构造函数,问题是该类型是一个布尔值,所以我删除了它,它似乎工作。

答案 5 :(得分:0)

  1. 要禁止从外部类调用默认构造函数,请使用:

    private HashDictionary(){}

  2. 要禁止从内部类中调用默认构造函数,请使用:

    声明参数化构造函数,不要在类中编写默认的非参数化构造函数。  public HashDictionary(String string){  }

  3. 如果你想在调用构造函数时抛出一些异常,那么:

    public HashDictionary()抛出异常{
        抛出新的异常(“从构造函数中抛出异常”);
    }

  4. 此致,比兰德拉。

答案 6 :(得分:0)

如果您不想使用默认构造函数但想要实例化类,则需要实现自定义构造函数。您必须告诉用户创建有效实例需要什么。就是这样!默认构造函数将不再可用。如果构造函数逻辑太复杂,可以随意提取私有方法,包括私有构造函数,如果你觉得它在你的情况下是好的。如果您有许多创建实例的方法,可以使用类似静态工厂的方法和私有ctor。 使私有ctor只禁用默认值是没有意义的(至少我没有看到)。

如果你不想实例化一个类(我的意思是你不想使用默认的ctor而你没有理由创建一个自定义ctor),这意味着你只想使用静态字段/方法,所以make全班静态。

哦,我认为我们谈论的是非抽象类。