我是 IT 部门的项目经理,我和我的开发人员一遍又一遍地争论,他们根本不在乎。浏览网络,甚至大多数人都主张捕获并抛出 RuntimException ......每次看到它,我都会对 10 年经验后的无能感到难以置信的愤怒......
规则 1:
如果您没有捕获 RuntimeException,则永远不要在 Program 中抛出 runtimeexception。
规则二:
只有捕获一个运行时异常才能真正导入与您的软件无关的东西:例如发送邮件到操作紧急转移、记录异常、重新启动服务器......
这样做的原因是,在好的软件中,日志文件中没有堆栈跟踪。当开始编码感到不舒服时,请执行以下操作:
创建新类 DevelopmentException 扩展异常。然后继续编写代码并最初捕获异常。然后你把它作为你自己的开发例外重新抛出。在捕获它的方法中,您记录它。
现在:每天 grep 为您非常个人的 DevelopmentException。如果你找到了,这意味着还有工作要做。进入您的代码并查看异常来自何处并事先捕获它。
理想情况下,您将再也不会在程序的这一部分中看到 DevelopmentException。重复直到您的软件中剩下 0 个 Stacktraces 并且您已经完善了异常处理。
抛出和捕获运行时异常的最大问题是编译会忽略它。因此,这意味着当您的一位同事编写预订界面并在缺少值时抛出 RuntimeException(是的,ppl 确实如此)... ...编译器不会向您显示可能存在运行时异常。现在,当您没有捕获它时,您的程序可能会在没有任何日志记录的情况下关闭。
为什么叫RuntimeException?许多人将此误认为是程序运行时的错误,但它实际上意味着“一个异常具有完全破坏性,以至于需要停止 Java 运行时环境”。换句话说,它的意思是:OutOfMemory、BrokenRam、JRE 的 FaultyImplementation 等......基本上是告诉你的东西:程序无法运行,因为 PC 正在崩溃......
只是我的2美分。有没有人经历过同样的事情?
PS:关于不断删除堆栈跟踪:
一旦你看到一个异常尝试用例如 NullpointerException 来捕捉它。当您看到 Nullpointerexception 转到您的代码并删除堆栈跟踪时,只需 log.WARN(NullpointerOccured) 并编写您的程序以重试左右......
理想情况下,您会重复,直到您再也看不到 Stacktrace。当您永远看不到堆栈跟踪时,这意味着所有可能出错的问题都已处理(当然除了 RuntimeException)