0

当一个方法抛出异常时,我们是否需要在方法内部有一个 try 块?

例如,

    public void foo() throws SomeException{
        try{
            // content of method
        }
    }

是否需要 try 块?或者,该方法是否能够在没有它的情况下抛出 SomeException :

    public void foo() throws SomeException{
            // content of method
    }

当我们没有用throw显式抛出 SomeException时就是这种情况。

4

6 回答 6

3

如果SomeException是已检查的异常,您必须要么

  • 使用try{}catch
  • 声明你的方法抛出它。

您不必两者都做,您在问题中显示的任何一个示例都可以正常工作。

不同之处在于try您自己处理子句SomeException,而通过声明您自己的方法throws,您将处理的责任委托SomeException给调用方法。

于 2012-07-25T10:09:27.193 回答
0

当一个方法抛出一个异常时,它会将处理异常的责任传递给它的调用者。因此,如果您将其放入签名中,则无需处理异常。如下所示。

public void foo(){
        try{
            // content of method
        }
    }

但如果你这样写。

public void foo() throws SomeException{

    }

您将按如下方式调用您的方法。

try{

   foo();
}
于 2012-07-25T10:09:51.860 回答
0

1.如果我们从程序中调用 throws an Exception的方法,那么我们需要try/catch 在方法调用周围使用。

2.假设我们正在编写一个方法 throws an exception那么我们需要使用 throw new Exception object 该方法。

3. 异常是 Exception 类型的对象。我们有Checked ExceptionUnchecked Exception (Runtime Exception)

于 2012-07-25T10:11:18.557 回答
0

您不需要 try 块。

public void foo() throws SomeException {
  // do some stuff
  // you decide to throw the exception by yourself:
  if (throwAnException) throw new SomeException();
  // or you call a method that throws SomeExpection:
  methodThatCanThrowSomeException();
  // do more stuff
}

只要您在签名中声明,就可以了。您的方法的调用者必须处理异常,而不是您。所以调用者可能会这样做:

try {
  foo();
} catch (SomeException e) {
  // handle exception
}

或者他可能会自己传递下去。

于 2012-07-25T10:13:20.297 回答
0

您经常遇到的最有问题的情况是调用声明检查异常的方法。在现实生活中的绝大多数情况下,当场处理该异常是不合适的,而是让它向上传播。不幸的是,Java 让你一直重新声明这个相同的异常,这会造成混乱,暴露实现细节,并且通常还会破坏现有方法的约定。

在这种情况下,继续进行的方法是包装并重新抛出

catch (RuntimeException e) {throw e;} catch (Exception e) {throw new RuntimeException(e);}
于 2012-07-25T10:15:06.213 回答
0

你基本上不需要在里面有一个 try 块

      public void foo() throws SomeException {
// do some stuff
// you decide to throw the exception by yourself:
if (throwAnException) throw new SomeException();
// or you call a method that throws SomeExpection:
methodThatCanThrowSomeException();
// do more stuff
 }
于 2012-07-25T10:37:28.540 回答