try-catch块应该包含一个捕获它抛出的所有异常的函数吗?

时间:2012-12-01 22:27:36

标签: java exception

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

Inside First.java:

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

Inside 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块?

3 个答案:

答案 0 :(得分:1)

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

public void boo() throws IOException{

...

}

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

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

答案 1 :(得分:0)

不,这实际上是编译错误(或警告?),因为boo是非投掷的(除非Second的构造函数抛出)。试试吧。

答案 2 :(得分: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()的方法必须处理异常,否则会导致异常