【发布时间】:2021-07-27 12:49:12
【问题描述】:
假设我有这个类:
public class Obj1{
...
public void do_Something(int someParameter) throws SomeException {
if(...) throw new SomeException();
...
}
...
}
然后,某处
public class Obj2{
...
public void do_SomeOtherThing(Obj1 obj1){
obj1.do_Something();
//apparently the only solution is try-catching it directly, even if I'm not in the main...
...
}
我了解到异常只能由 METHOD 抛出,并由 MAIN 捕获,所以,我的问题是:try-catch 是处理子方法异常的唯一方法,还是最外部的方法(do_SomeOtherThing)会扔掉,这样我可以直接在main中try-catch,删除Object2类中的try-catch?
基本上,我可以这样做吗?
public static void main(String[] args){
Object1 obj1 = new Object1();
Object2 obj2 = new Object2();
try{
obj2.do_SomeOtherThing(obj1);
}
catch(SomeException e){
...
}
}
还是不行?
【问题讨论】:
-
是的,如果
do_SomeOtherThing也标有throws SomeException,则可以这样做,假设SomeException实际上是一个检查异常。但是,“异常只能被main捕获”是非常不正确的。当该方法可以适当地处理异常时,应该捕获异常。 -
所以基本上我必须在
do_SomeOtherThing中声明throws SomeException而不会有效地抛出任何东西? -
@Sweeper:这并不总是正确的,但它比让每个方法都捕获东西要好得多。这样程序在第一次抛出某些东西时会快速失败,堆栈跟踪应该指出问题所在。不同类型的应用程序将有不同的地方来捕捉东西,但这是一个好的开始。 AleMaffe:你让它从其他方法中被抛出。
-
@NathanHughes 这就是为什么我如此专注于绝对删除非主要内容中的所有形式的捕获
标签: java exception methods try-catch