有人能解释一下java.lang.RuntimeException和java.lang.Exception的区别吗?如果我创建自己的异常,我如何决定扩展哪一个?
当前回答
用户定义异常可以是已检查异常或未检查异常,这取决于它扩展到的类。 用户定义异常可以是自定义检查异常,如果它扩展到异常类 用户定义异常可以是自定义未检查异常,如果它扩展到运行时异常类。 定义一个类,并使其成为异常或运行时异常的子类
其他回答
简单地说,如果你的客户端/用户可以从异常中恢复,那么将其设置为Checked Exception,如果你的客户端不能从异常中恢复,那么将其设置为Unchecked RuntimeException。例如,RuntimeException是一个编程错误,就像除零一样,除了程序员自己,没有用户可以做任何事情,那么它就是一个RuntimeException。
有两种类型的异常,如果你得到这种类型的异常,你可以从检查异常恢复。运行时异常是不可恢复的,运行时异常是编程错误,程序员应该在编写代码时注意它,继续执行这个可能会给你不正确的结果。运行时异常是关于违反先决条件的,例如,你有一个大小为10的数组,并且你试图访问第11个元素,它将抛出ArrayIndexOutOfBoundException
用户定义异常可以是已检查异常或未检查异常,这取决于它扩展到的类。 用户定义异常可以是自定义检查异常,如果它扩展到异常类 用户定义异常可以是自定义未检查异常,如果它扩展到运行时异常类。 定义一个类,并使其成为异常或运行时异常的子类
来自oracle文档:
这是底线原则:如果客户可以合理地 希望从异常中恢复,使其成为受控异常。如果 客户端不能做任何事情来从异常中恢复 未经检查的异常。
运行时异常表示由编程问题导致的问题,因此,API客户端代码不能合理地期望从中恢复或以任何方式处理它们。
runtimeexception类似于“无效使用api导致的异常”:IllegalStateException, NegativeArraySizeException, NullpointerException
对于异常,你必须显式地捕获它,因为你仍然可以做一些事情来恢复。异常的例子有:IOException, TimeoutException, PrintException…
Exception被选中,RuntimeException未选中。
Checked表示编译器要求您在catch中处理异常,或将您的方法声明为抛出异常(或其超类之一)。
通常,如果API的调用者希望处理异常,则抛出已检查异常,如果调用者通常无法处理异常,则抛出未检查异常,例如其中一个参数的错误,即编程错误。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap