Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否应该尝试在捕获它抛出的所有异常的函数周围使用catch块?_Java_Exception - Fatal编程技术网

Java 是否应该尝试在捕获它抛出的所有异常的函数周围使用catch块?

Java 是否应该尝试在捕获它抛出的所有异常的函数周围使用catch块?,java,exception,Java,Exception,我不熟悉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());

我不熟悉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块?

否,这实际上是一个编译错误(或警告?),因为
boo
是非递归的(除非
Second
的构造函数抛出)。试试看。

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

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

public void boo() throws IOException{

...

}

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

但是你所拥有的应该很好用。希望有帮助

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

public void boo() throws IOException{

...

}

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

但是你所拥有的应该很好用。希望有帮助

因为您在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()的方法必须处理异常,否则,它将导致异常,因为您在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()的方法必须处理异常,否则,将导致异常

一切都是非抛出的。是的,我必须将try/catch放在第二个.java类boo()方法中。问题是,我不确定是否还需要为First.java foo()方法添加try/catch。因为它调用可能生成IOexception的obj.boo()方法。boo可能不会在代码中引发IOexception。如果一个函数捕捉到它内部抛出的异常,那么这些异常本质上“不算”,而且从任何调用函数的角度来看,它们肯定不算。正如我所说的,试试看,看看编译器告诉你什么。一切都是非抛出的。是的,我必须将try/catch放在第二个.java类boo()方法中。问题是,我不确定是否还需要为First.java foo()方法添加try/catch。因为它调用可能生成IOexception的obj.boo()方法。boo可能不会在代码中引发IOexception。如果一个函数捕捉到它内部抛出的异常,那么这些异常本质上“不算数”,而且从任何调用函数的角度来看,它们肯定不算数。正如我所说的,尝试一下,看看编译器会告诉你什么。因此,如果我为foo()和boo()都包含try/catch块。我猜foo()中的catch块永远不会捕获任何异常,对吗?因为boo()中的try/catch块已经捕获了所有内容!因此,如果我同时为foo()和boo()包含try/catch块。我猜foo()中的catch块永远不会捕获任何异常,对吗?因为boo()中的try/catch块已经捕获了所有内容!