使用try和catch进行异常处理

时间:2013-11-14 01:48:12

标签: java exception-handling

创建类TestBook,并创建测试用例来测试类Book

在此阶段不处理任何异常,只需将它们传递给调用方法即可。

上面的指令是否意味着我的测试者类,TestBook应该有它的主要方法“抛出ParseException”,当我用“错误”运行我的程序时,这不应该崩溃,而应该将异常传递给...?< / p>

  public class TestBook{
       public static Book directory=new Book(); //Book contains an arraylist of dates

     public static void main(String[] args) throws ParseException {
                directory.addApt("01-04-1996","testdate"); 
           //this will create an instance of a  Apt and is in the INCORRECT format.
      }

Book类中的addApt方法如下所示:

      String[] dates=date.split("-");
        if(dates[0]!=2)
            throw new ParseException("incorrect format day should be in numbers,2);
          if(dates[0]!=3)
            throw new ParseException("incorrect format month should be in letters,2);
          if(dates[0]!=4)
            throw new ParseException("incorrect format year should be in numbers,2);
        Apt newAppt=new Apt=(date,type);

当我运行它时,我收到一条错误消息:线程“main”中的异常java.text.ParseException:格式不正确,月份应该是字母。

但我的问题是为什么会出现这种情况,因为我正在抛出它,为什么要像这样处理呢?我想我对throw(s)与try / catch ...感到困惑。

3 个答案:

答案 0 :(得分:0)

似乎分配是创建一个没有TestBook方法的类main,而是使用其他static方法来测试Book类。例如,您可能有一种测试以正确格式创建书籍的方法,一种测试以错误格式创建书籍的方法,等等。

答案 1 :(得分:0)

没有人抓住/处理你扔的异常,所以它一直冒泡到顶部并最终被打印出来。你期待发生什么?

throw触发异常。如果你想自己处理它,你需要catch它在某个地方......

答案 2 :(得分:0)

throw会抛出exception。该关键字允许您抛出自己的自定义例外。

所有未处理的异常(自定义或标准异常)都会导致运行时异常。

将调用addApt方法的代码放在try/catch块中,将catch exceptions置于throwing


抛出异常是一种很好的方法,可以从具有非void返回类型的方法中返回一个值。举一个非常简单的例子,假设我们有一个名为public int getDaysInMonth(int month)的方法。现在,我们期望month为1-12。我们的方法必须返回一个int。那么当使用无效月调用方法时我们该怎么办?

int getDaysInMonth(int month) {
    switch(month) {
        //case 1-12
        default:
            break;
    }
}

所以...我们可以为所有有效月份提供案例,这不是问题。一种解决方案可能是返回0-1或某些明显的返回值。但实际上我们根本不需要返回任何东西。我们可以抛出异常。

default:
    throw new IllegalArgumentException("Month must be between 1 and 12");

现在,我们将getDaysInMonth(int)的调用放在try/catch块中,或者如果我们不调用,我们的程序可能会因非法的参数异常而停止。但是我们可以将逻辑放在catch块中来处理如何处理这个异常等等。

我知道我的例子不是根据你的情况建模的,但它是如何充分利用throw的一个很好的例子。