关于java runtimeException和exception的两种异常的用途
2017-04-07 16:25
99 查看
网上摘得一段话,比喻的很恰当:
继承Exception还是继承RuntimeException是由异常本身的特点决定的,而不是由是否是自定义的异常决定的。例如我要写一个java api,这个api中会调用一个极其操蛋的远端服务,这个远端服务经常超时和不可用。所以我决定以抛出自定义异常的形式向所有调用这个api的开发人员周知这一操蛋的现实,让他们在调用这个api时务必考虑到远端服务不可用时应该执行的补偿逻辑(比如尝试调用另一个api)。此时自定义的异常类就应继承Exception,这样其他开发人员在调用这个api时就会收到编译器大大的红色报错:【你没处理这个异常!】,强迫他们处理。又如,我要写另一个api,这个api会访问一个非常非常稳定的远端服务,除非有人把远端服务的机房炸了,否则这个服务不会出现不可用的情况。而且即便万一这种情况发生了,api的调用者除了记录和提示错误之外也没有别的事情好做。但出于某种不可描述的蛋疼原因,我还是决定要定义一个异常对象描述“机房被炸”这一情况,那么此时定义的异常类就应继承RuntimeException,因为我的api的调用者们没必要了解这一细微的细节,把这一异常交给统一的异常处理层去处理就好了。
转
作者:二大王
链接:https://www.zhihu.com/question/51970444/answer/128806764
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
总结一下, 抛出 RuntimeException,调用方法的程序员不需要知道会出这个异常,抛出Exception的方法,调用者需要明确知道这个方法里会出现什么异常,并提示调用者要去处理这个可能得异常。
继承Exception还是继承RuntimeException是由异常本身的特点决定的,而不是由是否是自定义的异常决定的。例如我要写一个java api,这个api中会调用一个极其操蛋的远端服务,这个远端服务经常超时和不可用。所以我决定以抛出自定义异常的形式向所有调用这个api的开发人员周知这一操蛋的现实,让他们在调用这个api时务必考虑到远端服务不可用时应该执行的补偿逻辑(比如尝试调用另一个api)。此时自定义的异常类就应继承Exception,这样其他开发人员在调用这个api时就会收到编译器大大的红色报错:【你没处理这个异常!】,强迫他们处理。又如,我要写另一个api,这个api会访问一个非常非常稳定的远端服务,除非有人把远端服务的机房炸了,否则这个服务不会出现不可用的情况。而且即便万一这种情况发生了,api的调用者除了记录和提示错误之外也没有别的事情好做。但出于某种不可描述的蛋疼原因,我还是决定要定义一个异常对象描述“机房被炸”这一情况,那么此时定义的异常类就应继承RuntimeException,因为我的api的调用者们没必要了解这一细微的细节,把这一异常交给统一的异常处理层去处理就好了。
转
作者:二大王
链接:https://www.zhihu.com/question/51970444/answer/128806764
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
总结一下, 抛出 RuntimeException,调用方法的程序员不需要知道会出这个异常,抛出Exception的方法,调用者需要明确知道这个方法里会出现什么异常,并提示调用者要去处理这个可能得异常。
相关文章推荐
- 第一次写Blog,关于org.apache.jasper.compiler.ParseException异常
- 关于Strust的异常信息:java.lang.IllegalArgumentException: Resources cannot be null.
- 解决C++/CLI中关于“MissingManifestResourceException类型的未经处理的异常出现在mscorlib.dll”问题一例
- 关于hive的ClosedByInterruptException异常新动向3
- 关于两种错误处理方式(返回值,异常)的浅显认识
- 关于异常的疑难解答:System.BadImageFormatException (32 位上编译的.net程序,在64位上跑的时候,经常碰到的问题)
- 关于 CrystalDecisions.CrystalReports.Engine.DataSourceException 异常
- 关于JSON to JAVA object的java.io.EOFException异常
- 关于org.apache.struts2.json.JSONException: org.apache.struts2.json.JSONException异常的解决
- 关于Visual Studio 2012 RTM 中创建windows 8 style类型的应用出现的XamlParseException 异常
- 关于写注册表的时候出现UnauthorizedAccessException异常的问题
- 关于tomcat下java.io.NotSerializableException异常的解决方法
- Java解析XMl的两种方式,集合操作时NoSuchElementException异常重现
- 关于SLF4J Exception异常处理
- 关于c# 引发了"system.indexOutofRangeException"类型异常,该怎么处理
- 关于struts2+hibernate3.2中出现的java.lang.ClassCastException: java.lang.Integer异常的解决方案
- 关于出现List的java.util.ConcurrentModificationException异常问题的解决
- 关于Linq to SQL 的“异常详细信息: System.InvalidCastException: 指定的转换无效。”
- 关于异常的疑难解答:System.BadImageFormatException
- 转载一篇关于EOFException异常的描述