Java 用户定义异常&;运行时异常差异

Java 用户定义异常&;运行时异常差异,java,exception,runtime,checked,Java,Exception,Runtime,Checked,若用户定义的异常扩展了类异常并成为选中的异常,那个么为什么运行时异常也会例外呢。我尝试搜索多个论坛,但仍然无法理解处理RTE与普通用户定义异常不同的因素是什么-因为两者都扩展了异常类。用户定义异常可以是: 选中类型,如果它直接或间接扩展了异常,或 未经检查的类型,如果它直接或间接扩展RuntimeException (理论上,您可以扩展Throwable或Error或Error的子类,但这是不必要的、不好的做法,而且可能是危险的。) JVM对检查类型和未检查类型没有区别对待。不同的处理是由J

若用户定义的异常扩展了类异常并成为选中的异常,那个么为什么运行时异常也会例外呢。我尝试搜索多个论坛,但仍然无法理解处理RTE与普通用户定义异常不同的因素是什么-因为两者都扩展了异常类。

用户定义异常可以是:

  • 选中类型,如果它直接或间接扩展了
    异常
    ,或
  • 未经检查的类型,如果它直接或间接扩展
    RuntimeException
(理论上,您可以扩展
Throwable
Error
Error
的子类,但这是不必要的、不好的做法,而且可能是危险的。)

JVM对检查类型和未检查类型没有区别对待。不同的处理是由Java编译器完成的,这就是为什么如果没有正确处理检查异常,就会出现编译错误。这些规则是由Java语言规范(JLS)而不是运行时系统强制执行的


。。。为什么
RunTimeException
也扩展了
Exception
是不同的


因为JLS说是的。检查和未检查异常的规则是Java语言的一部分,就像语法、作用域规则、类型规则等一样。

既然
RuntimeException
是语言的一部分,它肯定可以以不同的方式处理,就像
Serializable
不仅是一个普通的接口,而且是以一种特殊的方式处理的。所以JVM对待RTE的方式不同?这有助于。。。JLS是我错过的一个陷阱。非常感谢您的解释。非常感谢你的帮助。