抛出IllegalArgumentException是不行的

时间:2015-01-30 02:13:42

标签: java generics try-catch

因此,对于家庭作业,我们的教授希望我们尝试将一个整数插入一个字符串数组中:

public boolean addPerson(V person, int number)throws IllegalArgumentException{
    if(numEntries < people.length){
        people[numEntries] = person;
        phones[numEntries] = number;
        numEntries++;
        return true;
    }
    return false;
}

public static void main(String[] args){
    PhoneBook<String> names = new PhoneBook<String>();
    PhoneBook<Integer> ssn = new PhoneBook<Integer>();
    names.addPerson("john", 1235681213);
    ssn.addPerson(123324567, 2048);
    Integer soc = 132546789;
    try{
        names.addPerson(soc, 1996);
    }
    catch(IllegalArgumentException e){
        System.out.println("You cannot enter a Social Security Number "
            + "into the Name phone book!");
    }

但是,这不起作用,我仍然得到与没有try-catch相同的错误。知道我做错了什么吗?

修改 对不起,伙计们,我可能应该包含addPerson方法的代码。我还不知道如何处理异常。

1 个答案:

答案 0 :(得分:1)

您的教授可能希望您观察的是编译错误。数组的类型在即时时间固定,不会改变。该数组将只接受声明接受的任何类型,而不接受任何其他类型。

对此处的例外情况进行轻微的咆哮。


让我们快速聊聊已检查和未检查的例外情况。这两者之间存在差异,将它们混合在一起可能会很痛苦。

让我们从检查过的异常开始。这些是您必须明确捕获自己或声明它们被抛出的例外情况。这些内容包括IOExceptionFileNotFoundException *和其他一些内容 - 几乎任何来自Exception类的内容。

Java告诉您,您有能力从此错误中恢复,而您作为一名优秀的开发人员应该确保您的程序

还有未经检查的例外情况;任何延伸RuntimeExceptionError的内容。这些 not 需要被声明为抛出,因为它们在应用程序的运行时期间发生,并且实际上无法保证程序从此错误中恢复。一个例子是ArithmeticException;如果你的申请试图除以零,你的申请是否真的会恢复?它会处于什么状态?

还有一些你真的不应该抓到 - 如果你设法赶上OutOfMemoryError,你会回到什么?那时你真的无能为力!

现在,对于你的代码:你已经声明了一个未经检查的异常被抛出。这是有效的语法,但Java不会随意为你抛出异常,因为它没有'在那个会抛出它的代码块中的任何东西。 最差,您可以获得ArrayIndexOutOfBoundsException,但这不是IllegalArgumentException

为了实际抛出该未经检查的异常,您需要明确抛出它:

throw new IllegalArgumentException();

......你也需要有充分的理由这样做。例外是昂贵的。

*:我意识到FileNotFoundException 是一个 IOException。它仍在检查中。