java exception 和 runtimeException的区别
来源:互联网 发布:淘宝澳洲站 编辑:程序博客网 时间:2024/05/22 15:42
转载地址:http://jiangyingji1.blog.163.com/blog/static/17163034020111023105410991/
RuntimeException 是属于unchecked (java 编译器允许不catch)表示一类 未知的不确定的只有在运行时才会出现的异常。
而非RuntimeException 是checked (java 编译器必须要求 catch),大概指一类可以预知的,当发生异常后知道如何处理的异常,所以需要捕获。
而非RuntimeException 是checked (java 编译器必须要求 catch),大概指一类可以预知的,当发生异常后知道如何处理的异常,所以需要捕获。
xifei321 (初级程序员) 2010-04-26
你的标题有问题啊,应该这么说
Exception和继承自Exception的RuntimeException有什么区别呢?
Java compiler要求所有的Exception 要么被catch,要么被throw,除非这是一个RuntimeExeption (e instanceof RuntimeException)。也就是说,通常的Exception一定要被处理,也即我们所说的 checked exception,而RuntimeException不强制要求处理,(当然你自己要处理也可以),所以我们称为unchecked exception。
之所以区分 checked/unchecked exception,JAVA的设计思想是区分从类/方法设计者角度来看两种不同的异常:
一种是设计者认为这个方法在使用过程中使用者能够处理的异常,这些往往作为checked exception。比如一个IO系统的设计者会认
Exception和继承自Exception的RuntimeException有什么区别呢?
Java compiler要求所有的Exception 要么被catch,要么被throw,除非这是一个RuntimeExeption (e instanceof RuntimeException)。也就是说,通常的Exception一定要被处理,也即我们所说的 checked exception,而RuntimeException不强制要求处理,(当然你自己要处理也可以),所以我们称为unchecked exception。
之所以区分 checked/unchecked exception,JAVA的设计思想是区分从类/方法设计者角度来看两种不同的异常:
一种是设计者认为这个方法在使用过程中使用者能够处理的异常,这些往往作为checked exception。比如一个IO系统的设计者会认
为诸如物理文件不存在或者介质无法读取等异常时很可能发生,而使用者完全可能捕获这个异常,通过让用户 重新输入文件名等方式重新进行这个操作,也就是说,这是一个可恢复的操作。所以我会在诸如 read()/write()等操作中throw 一个 IOException(checked exception)。
第二种是设计者认为使用者不能够处理的异常,比如我写一个函数要求传入的参数是个正数,那么当我发现使用者传 了个负数进来时,合理的预期是程序中出bug了。如果我抛出一个异常描述这件事,即使我要求调用者捕获这个异常,他肯定也不知道该怎么办(总不能随便传一 个正数进来吧)。这时候我就会抛出一个IllegalArgumentException(uncheck exception),这里面的潜台词是:小子,我知道你也是帮人背黑锅的,处理不了这个,你还是交给你的领导(调用你的程序)去处理这个异常吧。
同理,当JVM发现除数为0时,抛出的ArithmeticException也是一个unchecked exception。
从这里可以看出,checked exception和 unchecked exception的根本区别在于设计者认为使用者是否能够并且应该处理这个异常。不幸的是,由于Java使用者水平的参差不齐,大量的 unchecked exception该被设计成了checked exception,而对于真正的checked exception,又有太多被catch了之后啥都不作就悄无声息了。尤其是不声不响吞噬exception的行为,不但达不到设计者本来的要求(进行 恢复处理),甚至问题更大(连 unchecked exception那种最后报错的效果都没了)。
所以, C#在异常处理上采用了完全不同的思路,把所有的的exception都设计为 unchecked exception,也就是说,它基于这样一种思路: 我不要求任何人处理任何异常;如果你能处理,那么你就显示catch这种异常;如果某种异常没有人catch,那么系统最终会崩溃。
第二种是设计者认为使用者不能够处理的异常,比如我写一个函数要求传入的参数是个正数,那么当我发现使用者传 了个负数进来时,合理的预期是程序中出bug了。如果我抛出一个异常描述这件事,即使我要求调用者捕获这个异常,他肯定也不知道该怎么办(总不能随便传一 个正数进来吧)。这时候我就会抛出一个IllegalArgumentException(uncheck exception),这里面的潜台词是:小子,我知道你也是帮人背黑锅的,处理不了这个,你还是交给你的领导(调用你的程序)去处理这个异常吧。
同理,当JVM发现除数为0时,抛出的ArithmeticException也是一个unchecked exception。
从这里可以看出,checked exception和 unchecked exception的根本区别在于设计者认为使用者是否能够并且应该处理这个异常。不幸的是,由于Java使用者水平的参差不齐,大量的 unchecked exception该被设计成了checked exception,而对于真正的checked exception,又有太多被catch了之后啥都不作就悄无声息了。尤其是不声不响吞噬exception的行为,不但达不到设计者本来的要求(进行 恢复处理),甚至问题更大(连 unchecked exception那种最后报错的效果都没了)。
所以, C#在异常处理上采用了完全不同的思路,把所有的的exception都设计为 unchecked exception,也就是说,它基于这样一种思路: 我不要求任何人处理任何异常;如果你能处理,那么你就显示catch这种异常;如果某种异常没有人catch,那么系统最终会崩溃。
0 0
- Java中RuntimeException和Exception的区别
- java exception 和 runtimeException的区别
- Java中RuntimeException和Exception的区别
- Exception和RuntimeException的区别
- Exception和RuntimeException的区别
- Java初学习 - java exception 和 runtimeException的区别
- JAVA Exception和RuntimeException的区别和用法、用处
- java error和exception的区别,RuntimeException和非RuntimeException的区别
- Java基础回顾 : RuntimeException和Exception的区别
- Java中Exception和RuntimeException区别
- java 中的Exception和RuntimeException区别
- RuntimeException和Exception区别
- RuntimeException和Exception区别
- RuntimeException和Exception区别
- RuntimeException和Exception区别
- RuntimeException和Exception区别
- RuntimeException和Exception区别
- Error和Exception、RuntimeException和非RuntimeException的区别
- angularjs·的使用:指令(3)
- 【e医疗原创】如何做好以数字签名为基础的医疗信息安全性管理
- web前端入坑:web前端到底怎么学?干货资料!
- Grid表中 组合框显示 displayField
- c语言,fclose()带来的内存错误(求解)
- java exception 和 runtimeException的区别
- EL表达式
- mysql EF6.0 报错:“ Guid 字符串只应包含十六进制字符。”
- Windows RPC 远程过程调用
- 子序列最大和
- hdu 2297 Run 半平面交
- 数组类小案例(重载 '[]' '=' '==' 和 '!=' 运算符)(进阶4)
- ZZULIOJ 1914 天火好帅
- GPUImage中是如果保存OpenGL渲染后的视频的