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,那么系统最终会崩溃。

转载于:https://www.cnblogs.com/abc8023/p/6216740.html

基础知识《十》unchecked异常和checked异常相关推荐

  1. Java SE 基础(十)Java中的异常

    Java SE 基础(十)Java中的异常 什么是异常 异常的处理 异常类 throw和throws 自定义异常 什么是异常 Java 中处理错误的一种机制,Java 中的错误大致分为两类,一类是编译 ...

  2. Java基础知识强化99:Java 常见异常及趣味解释

    常见 Java 异常解释:(译者注:非技术角度分析.阅读有风险,理解需谨慎:) 1. java.lang java.lang软件包是java语言的核心部分,它提供了java中的基础类. java.la ...

  3. Java基础知识(十) 多线程

    Java基础知识 1. 什么是多线程?它与进程有什么区别?为什么要使用多线程 2. 同步和异步有什么区别 3. 如何实现Java多线程 4. run()方法与start()方法有什么区别 5. 多线程 ...

  4. Python基础知识十二【文件操作】

    文件操作 1.文本文件和二进制文件 2.文件操作相关模块概述 3.创建文件对象 4.文本文件的写入 4.1基本的文件写入操作 5.常用编码介绍 5.1 ASCII 5.2 ISO8859-1 5.3 ...

  5. 物流基础知识(十八)

    流通加工的概念 一.流通加工的概念 流通加工是流通中的一种特殊形式. 商品流通是以货币为媒介的商品交换,它的重要职能是将生产及消费(或再生产)联系起来,起"桥梁和纽带"作用,完成商 ...

  6. 物流基础知识(十九)

    包装的基本特性和主要功能 包装基本特性是指保护性.单位集中性和便利性.包装的主要功能是指保护商品.方便物流.促进销售和方便消费. 什么是托盘包装? 托盘包装 ( Palletizing ) 是指以托盘 ...

  7. 物流基础知识(十四)

    铁路货物运输的种类 铁路货物运输分为三种: 1. 整车运输:2. 零担运输: 3. 集装箱运输. 其中还包括快运,整列行包快运,但现在开展的范围不大. 一批货物的重量.体积或形状需要以一辆以上货车运输 ...

  8. Golang基础知识--十安辰

    Golang基础 Go语言的SDK是什么? SDK就是软件开发工具包.做Go开发之前,我们需要先安装配置好SDK Golang环境变量配置及其作用 GOROOT:指定GO SDK的安装目录 Path: ...

  9. 物流基础知识(十二)

    现代物流的价值 一.对国民经济增长的基础性支撑 新制度经济学的流行和新兴古典经济学的兴起使经济学对运输业的重要性有了进一步的认识.新兴古典经济学家杨小凯认为,运输发展作为改进交易效率的重要方式,可以提 ...

最新文章

  1. 阿里P7面试官告诉你:3-5年以上的Android开发如何深入进阶?Android中高级开发必须掌握哪些?
  2. 少儿编程python线上课程-北京Python程序开发课程
  3. nginx配置技巧汇总
  4. MySQL - mysqldump多种方式实现数据迁移
  5. python自定义colorbar_python可视化 matplotlib画图使用colorbar工具自定义颜色
  6. MyEclipse下JDBC-MySQL配置总结
  7. Fgui切割图集为散图
  8. Hbase的过滤器分类
  9. python电影数据分析报告_电影数据可视化项目分析报告
  10. Justinmind使用教程(1)——概述部分
  11. 国内流行的需求管理工具比较
  12. Android隐藏软件盘
  13. 虚拟中3DMax2018打开报错
  14. 马云除了发20亿玩红包,支付宝还干了一件轰动全球的大事儿!
  15. pip installl lap安装失败 error: Microsoft Visual C++ 14.0 or greater is required.
  16. 基于STC51:四轴飞控开源项目原理图与源码(入门级DIY)
  17. 2020年,拒绝划水,如何规划前端学习新路径?
  18. 小傻蛋的妹妹跟随小甲鱼学习Python的第四节004
  19. 《操作系统第四版》(刘振鹏 王煜)(一)引论
  20. 安卓桌面壁纸_任何安卓手机都可以体验苹果 quot;iOSquot; 啦

热门文章

  1. 平滑线反锯齿工具_PS大神常用选框类工具有哪些?其实很简单,小白认真学也能懂...
  2. wordpress ajax 注册,WordPress注册AJAX事件,前台后台代码演示视频教程 - 悠然自学网...
  3. java 线程安全的原因_Java并发编程——线程安全性深层原因
  4. SpringCloud 应用在 Kubernetes 上的最佳实践 — 线上发布(可回滚)
  5. Dragonfly 成为 CNCF 孵化项目,我们与基金会首位华人 TOC 聊了聊
  6. python快递分拣小程序_python英语单词测试小程序代码实例
  7. oracle sql删除重复,【转帖】SQL Oracle删除重复记录
  8. pcb 理论阻值、 过孔_超实用!PCB设计中过孔常用的6种处理方式
  9. yum 安装jdk_03Centos安装JDK
  10. python脚本创建拓扑_实验 1:Mininet --拓扑的命令脚本生成