【发布时间】:2021-02-02 13:34:16
【问题描述】:
“处理或申报。这是法律。” - 头脑优先
但是,这是一个好的法律吗?我先举个例子:
public static void main(String[] args) throws Exception {
m1();
}
static void m1() throws Exception{
m2();
}
static void m2() throws Exception {
throw new Exception();
}
m2() 抛出异常并且m1()调用m2(),这意味着它必须处理或声明它。嗯,让我们声明它。然后main() 调用m1() 并且它具有相同的轮询:declare 或 handle。我再次决定声明它并且代码编译得很好。
好的,它有效,但是谁处理了这个异常?好像没有人做过。我知道我是初学者,但我不喜欢那样的声音。是的,有些方法可以决定是声明还是处理异常,但为什么main()? main 方法不应该是一种只处理的方法吗?这样一来,任何一个例外都不会“溜走”。
我错过了什么吗?老实说,我很惊讶 main 方法只声明异常是可以的,因为知道这是 最后一个地方我们可以在技术上捕获一些东西。
【问题讨论】:
-
异常是为程序状态未知的意外情况设计的。如果你知道它,你可以处理异常。否则,程序崩溃比继续处理错误数据要好。
-
它转到线程的默认异常处理程序,该处理程序无论如何都存在,因为也可能发生未经检查的异常。在
main本身中处理异常被认为是最好的,但您可以将其留给默认的异常处理程序。 -
@NomadMaker,我不同意异常意味着“程序的状态未知”。例外只是意味着“我无法完成要求我做的事情”......一般来说,取例程的名称并在其开头添加“我无法......”......对于示例“ProcessFile”如果无法处理文件,则应引发异常。如果提供了错误的密码,“ValidateLogin”应该
not抛出异常......在这种情况下它能够验证用户,即登录失败。但是,如果用户数据库不可用,那么should会抛出异常。 -
@JoelFan 如果异常处理接近源,你可能是对的。但是,如果一个异常一直到 main(),那么很有可能无法重建发生的事情。然而,如果一个方法不能完成所要求的事情,那么它应该返回一个错误值而不是抛出一个异常。
-
没有人处理它 -> 程序崩溃。抓得越快,停止的代码就越少