Dir*_*irk 10
在Java中,该语言的原始发明者想要区分可能在程序中发生的常见类型的异常.他们想出了这三种类型:
检查的异常用于错误,这些错误可能在运行时发生,并且是预期的(例如)IOException.例如,在执行文件或网络I/O时,可能会在任何时候发生错误(磁盘已满,连接丢失等).程序员必须知道,任何被调用的操作都可能随时失败,因此,语言通过强制程序员对异常做一些事情来强制执行这种意识.
检查异常用于编程错误,例如NullPointerException,IllegalArgumentException等等,这些误差通常是程序员的疏忽的结果,并构成程序中的错误.它们不应该由代码的大多数部分处理,因为关于状态的所有保证,程序当前处于其中并且其一致性已经消失.其中的运行时异常的distiguishing特点是,它是意外(你真的不希望出现在你的程序中的错误,正确的-除了对"一般水平,当然,我也不会打赌我的生活在这个程序上没有错误")
错误,从中恢复几乎是不可能的,比如OutOfMemoryError,AssertionError等等,这些例外是非常糟糕的.这些人通常永远不会被处理,如果他们发生,将导致程序崩溃.
当然,在实践中,许多应用程序将处理运行时异常(至少通过记录它们),甚至Errors.像Spring这样的框架无论如何都会使所有异常都未经检查(即运行时异常),从而进一步模糊这种区别.有趣的是,已检查的异常被认为包含在C#中并被省略,因为它们给程序员增加了沉重的负担.即使在今天,关于该主题的意见也各不相同.