1

我是 JAVA 中异常处理的新手。我对此有一些基本问题:

在 First.java 内部:

public void foo ()
{
  Second obj = new Second();
  obj.boo();
}

Second.java里面

public void boo()
{
   try { /* may throw some I/O Exception here */ }
   catch (IOException e) { System.err.println(e.message()); }
   catch (Exception e) { System.err.println(e.message()); }
}

我的问题是,我们是否也需要(我们应该)在 First.java 的 foo() 方法中添加 try/catch 块吗?

4

3 回答 3

1

您不需要,但如果您不想在 boo() 中处理它,您可以执行以下操作:

public void boo() throws IOException{

...

}

public void foo(){
   try{
   boo();
   }catch(IOException ioe){ System.out.println(ioe.message());}
}

但是你所拥有的应该可以正常工作。希望有帮助!

于 2012-12-01T22:29:32.423 回答
0

不,这实际上是一个编译错误(或警告?),就像非抛出boo一样(除非Second的构造函数抛出)。尝试一下。

于 2012-12-01T22:29:06.247 回答
0

由于您在 boo() 方法中捕获了异常,因此您也没有。

但是相反,如果您为调用方法抛出异常来处理它,您将不得不在那里处理异常..

public void boo() throws IOException{
//something raising IOException
}

public void foo(){
  try{
      Sound obj = new Sound();
        obj.boo();
} catch(IOException io) {

//handle your exception
}
}

如果你不想在 foo() 方法中处理异常,你可以选择再次抛出它:

public void foo() throws IOException{
   //your code here
}

再次调用 foo() 的方法必须处理异常,否则会导致异常

于 2012-12-01T22:36:15.207 回答