2

Create class TestBook, and create test cases to test class Book

Do not handle any exception in this phase, just pass them to the caller method.

Does the above instruction mean my tester class, TestBook should have it's main method "throws ParseException" and when I run my program with an "error" this shouldn't crash instead it should pass the exception to...?

  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.
      }

The addApt method from the Book class looks like this:

      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);

When I run this, i get an error message: Exception in thread "main" java.text.ParseException: incorrect format, month should be in letters.

But My question is why this shows up, since I am throwing it, why is it handling it like this? i guess I am confused about the throw(s) vs. try/catch..

4

3 回答 3

0

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

于 2013-11-14T01:52:13.110 回答
0

没有人捕捉/处理您抛出的异常,因此它一直冒泡到顶部并最终被打印出来。你期待会发生什么?

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

于 2013-11-14T01:52:19.523 回答
0

throw抛出一个exception. 该关键字允许您抛出自己的自定义异常。

所有未处理的异常,无论是自定义的还是标准的,都会导致运行时异常。

将调用该addApt方法的代码放在一个try/catch块中,然后catchexceptions就是throwing.


抛出异常是避免从具有非 void 返回类型的方法返回值的好方法。举一个非常简单的例子,假设我们有一个名为public int getDaysInMonth(int month). 现在,我们预计month是 1-12。我们的方法必须返回一个 int。那么当这个方法被一个无效的月份调用时我们该怎么办呢?

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

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

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

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

我知道我的示例不是根据您的情况建模的,但它是如何充分利用throw.

于 2013-11-14T01:52:44.123 回答