当方法抛出和异常时,我们是否需要在方法内部使用try块?
例如,
public void foo() throws SomeException{
try{
// content of method
}
}
是否需要try块?或者,该方法是否能够在没有它的情况下抛出SomeException:
public void foo() throws SomeException{
// content of method
}
当我们不使用 throw 显式抛出SomeException时就是这种情况。
答案 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 object
和Checked 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
}