抛出Java异常

时间:2012-07-25 10:07:44

标签: java exception try-catch throw throws

当方法抛出和异常时,我们是否需要在方法内部使用try块?

例如,

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

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

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

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

6 个答案:

答案 0 :(得分:3)

如果SomeException已检查的例外,您必须

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

您不必同时执行这两项操作,无论您在问题中显示的示例都正常。

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

答案 1 :(得分:0)

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

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

但如果你这样写的话。

public void foo() throws SomeException{

    }

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

try{

   foo();
}

答案 2 :(得分:0)

1。如果我们从某个程序调用 throws an Exception的方法,那么我们需要使用 {{1方法调用周围的

2。假设我们正在撰写 try/catch的方法,那么我们需要 throws an exception 从这个方法开始。

第3。异常是Exception 类型的对象。我们有throw new Exception objectChecked Exception

答案 3 :(得分:0)

您不需要尝试阻止。

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
}

或者他可以自己进一步传递它。

答案 4 :(得分:0)

您经常遇到的最棘手的情况是调用声明已检查异常的方法。在绝大多数现实案例中在现场处理该异常是不合适的,但让它向上传播。不幸的是,Java让你一直重新声明同样的异常,这会造成混乱,暴露实现细节,并且通常也会破坏现有方法的合同。

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

catch (RuntimeException e) {throw e;} catch (Exception e) {throw new RuntimeException(e);}

答案 5 :(得分:0)

你根本不需要在其中设置试用块

      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
 }