有人能解释一下java.lang.RuntimeException和java.lang.Exception的区别吗?如果我创建自己的异常,我如何决定扩展哪一个?
当前回答
异常是处理应用程序流中意外事件的好方法。RuntimeException不被编译器检查,但你可能更喜欢使用扩展异常类的异常来控制你的api客户端的行为,因为他们需要为他们编译捕获错误。也可以形成良好的文档。
如果想要实现干净的接口,请使用继承来子类化应用程序具有的不同类型的异常,然后公开父异常。
其他回答
通常runtimeexception是可以通过编程方式阻止的异常。例如NullPointerException, ArrayIndexOutOfBoundException。如果在调用任何方法之前检查null, NullPointerException将永远不会发生。类似地,如果先检查索引,ArrayIndexOutOfBoundException也不会发生。RuntimeException不被编译器检查,所以它是干净的代码。
编辑:现在人们喜欢RuntimeException,因为它生成的代码很干净。这完全是个人的选择。
RuntimeException是Exception类的子类
这是Exception类的许多子类之一。RuntimeException是在Java虚拟机正常操作期间可以抛出的异常的超类。方法不需要在其throws子句中声明RuntimeException的任何子类,这些子类可能在方法执行期间抛出但未被捕获。
等级制度是
java . lang . object
——java.lang.Throwable
——java.lang.Exception
------------- java.lang.RuntimeException
正确使用RuntimeException?
不受限制的例外——争议:
如果客户可以合理的预期 要从异常中恢复,请使用 一个已检查的异常。如果客户 做什么都无法挽回 异常,使其为未检查的 例外。
注意,未检查异常是从RuntimeException派生的异常,而已检查异常是从exception派生的异常。
如果客户端无法从异常中恢复,为什么要抛出RuntimeException ?文章解释道:
运行时异常表示问题 这是编程的结果 问题,以及API客户端 不能合理地期望代码这样做 从它们中恢复或者处理它们 任何方式。这些问题包括 算术异常,例如 除以零;指针异常, 比如试图访问一个对象 通过空引用;和索引 例外情况,例如试图 控件访问数组元素 索引过大或过小。
来自oracle文档:
这是底线原则:如果客户可以合理地 希望从异常中恢复,使其成为受控异常。如果 客户端不能做任何事情来从异常中恢复 未经检查的异常。
运行时异常表示由编程问题导致的问题,因此,API客户端代码不能合理地期望从中恢复或以任何方式处理它们。
runtimeexception类似于“无效使用api导致的异常”:IllegalStateException, NegativeArraySizeException, NullpointerException
对于异常,你必须显式地捕获它,因为你仍然可以做一些事情来恢复。异常的例子有:IOException, TimeoutException, PrintException…
简单地说,如果你的客户端/用户可以从异常中恢复,那么将其设置为Checked Exception,如果你的客户端不能从异常中恢复,那么将其设置为Unchecked RuntimeException。例如,RuntimeException是一个编程错误,就像除零一样,除了程序员自己,没有用户可以做任何事情,那么它就是一个RuntimeException。
推荐文章
- 如何在POM.xml中引用环境变量?
- 如何在android中复制一个文件?
- 将整数转换为字符串,以逗号表示千
- 接口方法的最终参数-有什么意义?
- Java中的@UniqueConstraint注释
- 如何在清洁模式下运行eclipse ?如果我们这样做会发生什么?
- 获取java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory异常
- Java中的正则表达式命名组
- c#和Java的主要区别是什么?
- 什么是NullPointerException,我如何修复它?
- 在Java中使用“final”修饰符
- 无法在Flutter上找到捆绑的Java版本
- 如何在Kotlin解析JSON ?
- 如何在新的材质主题中改变背面箭头的颜色?
- 如何设置OkHttp连接超时