CheckedException需要由调用方处理,而Unchecked异常则不需要。
因此,在设计应用程序时,应记住您正在管理哪种特殊情况。
例如,如果您设计一种验证方法来检查某些用户输入的有效性,那么您知道调用者必须检查验证异常,并以一种美观的方式向用户显示错误。这应该是一个检查的异常。
或者,对于可以恢复的异常情况:假设您有一个负载平衡器,并且想要通知调用方“
n”台服务器之一已关闭,因此,调用方必须恢复事件,将消息重新路由到另一台服务器;这应该是一个检查异常,因为至关重要的是,调用者(客户端)尝试恢复错误,而不仅仅是让错误破坏程序流。
相反,有许多情况不应该发生,和/或应该破坏程序。例如,编程错误(例如被零除,空指针异常),API使用错误(IllegalStateException,OperationNotSupportedException),硬件崩溃或仅是一些不可恢复的小情况(与服务器的连接丢失),或世界末日:-);
在这种情况下,正常的处理是让异常到达代码的最外层代码块,该代码块向用户显示发生了不可预测的错误,并且应用程序无法继续执行操作。这是一种致命的情况,因此您唯一可以做的就是将其打印到日志或在用户界面中显示给用户。在这些情况下,捕获异常是错误的,因为,捕获异常后,您需要手动停止该程序,以免造成进一步的损害;因此最好让某种异常“打迷”
:)
由于这些原因,JRE中也有一些未检查的异常:OutOfMemoryError(不可恢复),NullPointerException(需要修复的错误),ArrayIndexOutOfBoundsException(另一个错误示例),等等。
我个人认为SQLException也应该不受检查,因为它表示程序中的错误或与数据库的连接问题。但是,有许多示例会导致您例外,而您实际上对管理方法一无所知(RemoteException)。
处理异常的最佳方法是:如果可以恢复或管理异常,请对其进行处理。否则让异常通过。其他人将需要处理。如果您是最后一个“别人”,并且您不知道如何处理异常,则只需显示该异常(在UI中记录或显示)即可。



