【问题标题】:Exception handling with try and catch使用 try 和 catch 处理异常
【发布时间】:2013-11-14 01:48:11
【问题描述】:

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

在这个阶段不要处理任何异常,只需将它们传递给调用者方法。

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

  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) vs. try/catch 感到困惑..

【问题讨论】:

  • 你已经声明从 main 抛出 ParseException 而不处理它。
  • 我很确定这段代码不能编译。你的意思是dates[0].length != 2?那么应该是dates[0]dates[1]

标签: java exception-handling


【解决方案1】:

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 的一个不错的示例。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-04
        • 2011-04-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-04
        • 1970-01-01
        • 2018-06-24
        • 2023-03-08
        相关资源
        最近更新 更多