参考文章:Java中的异常处理:何时抛出异常,何时捕获异常?
参考文章:Python错误处理-廖雪峰的官方网站


1 异常分类

Throwable对象可以分为两组:

  • 一组是unchecked异常,异常处理机制往往不用于这组异常,包括:

    • Error类通常是指Java的内部错误以及如资源耗尽的错误。当Error(及其衍生类)发生时,我们不能在编程层面上解决Error,所以应该直接退出程序。
    • Exception类有特殊的一个衍生类RuntimeException。RuntimeException(及其衍生类)是Java程序自身造成的,也就是说,由于程序员在编程时犯错。RuntimeException完全可以通过修正Java程序避免。比如将一个类型的对象转换成没有继承关系的另一个类型,即ClassCastException。这类异常应该并且可以避免。
  • 另一组是checked异常。这些类是由编程与环境互动造成程序在运行时出错。比如读取文件时,由于文件本身有错误,发生IOException。

2 异常处理机制

异常处理机制try…catch…finally…,代码如下:

try {//可能会有异常的代码} catch (Exception e) {//处理异常或抛新的异常}finally{//释放资源}

2.1 编译器对checked、unchecked异常的处理

public static void CheckedException() throws FileNotFoundException {String NotExistedFilePath="D:/abc.txt";File inFile = new File(NotExistedFilePath);FileReader fileReader = new FileReader(inFile);        }public static void CheckedExceptionWithTryCatch() {String NotExistedFilePath="D:/abc.txt";File inFile = new File(NotExistedFilePath);try {FileReader fileReader = new FileReader(inFile);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}        }public static int UncheckedException() {int[] s = new int[] { 1, 2, 3 };int tmp;tmp = s[3];        return tmp;}

以上代码中,

  • 方法‘CheckedException’声明中未添加‘throws FileNotFoundException’,编译器就会报错。
  • 方法‘CheckedExceptionWithTryCatch’,错误被捕获打印,但没有抛出。
  • 方法‘UncheckedException’在被运行时,会抛错‘ArrayIndexOutOfBoundsException’。

3 如何使用异常处理机制

Java的异常处理机制异常是一种强大的调试手段,它解决了下三个问题:

  • 什么出了错?(异常类型)
  • 在哪出的错?(异常堆栈跟踪)
  • 为什么出错?(异常信息)

但是如果你没有使用好异常处理机制,即不清楚"何时抛出异常,何时捕获异常,何时处理异常",就不可能很好的解决上述三个问题。以下三大原则可以帮你很好的使用异常处理机制:

  • 具体明确(异常类型)
  • 提早抛出(1抛更具体的异常类型,2 更好的定位)
  • 延迟捕获 (在能处理的时候捕获,而不是把它‘吃掉’)

以下是异常处理细则:

  • 如果你不能处理异常,不要捕获该异常。
  • 如果要捕获,应在离异常源近的地方捕获它。
  • 不要吞没你捕获的异常。(就是捕获的异常,但是什么也不做)
  • 除非你要重新抛出异常,否则把它log起来。
  • 当一个异常被重新包装,然后重新抛出的时候,不要打印statck trace。
  • 用自定义的异常类,不要每次需要抛出异常的时候都抛出java.lang.Exception。方法的调用者可以通过throws知道有哪些异常需要处理–所以它是自我描述的。
  • 如果你编写业务逻辑,对于终端用户无法修复的错误,系统应该抛出非检查的异常(unchecked exception);如果你编写一个第三方的包给其他的开发人员用,对于不可修复的错误要用需要检查的异常(checked exception)。
  • 绝对不要因为写throws语句会让你用起来不舒服,而不声明需要检查的异常。
  • 应用级别的错误或不可修复的系统异常用非检查的异常(unchecked exception)抛出。*(注意是错误,意味着不可修复,比如配置文件错误)
  • 根据异常的粒度组织你的方法

【Java】Java中的异常处理:何时抛出异常,何时捕获异常?相关推荐

  1. C++ 笔记(20)— 异常处理(抛出异常、捕获异常)

    异常提供了一种转移程序控制权的方式. C++ 异常处理涉及到三个关键字: try . catch . throw . throw : 当问题出现时,程序会抛出一个异常.这是通过使用 throw 关键字 ...

  2. java多线程中的异常处理

    2019独角兽企业重金招聘Python工程师标准>>> 在java多线程程序中,所有线程都不允许抛出未捕获的checked exception,也就是说各个线程需要自己把自己的che ...

  3. 【转】Java中关于异常处理的十个最佳实践

    原文地址:http://www.searchsoa.com.cn/showcontent_71960.htm 导读:异常处理是书写强健Java应用的一个重要部分,Java许你创建新的异常,并通过使用 ...

  4. java 异常处理发生异常_Java中的异常处理

    java 异常处理发生异常 Exception Handling in Java is a very interesting topic. Exception is an error event th ...

  5. Java Scanner 类、异常处理 总结

    1. Scanner 类 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入,并通过 Scanner 类的 next() 与 nextLin ...

  6. Java中的异常处理:何时抛出异常,何时捕获异常?

    Java中的异常处理:何时抛出异常,何时捕获异常? 参考文章: (1)Java中的异常处理:何时抛出异常,何时捕获异常? (2)https://www.cnblogs.com/tsiangleo/p/ ...

  7. java 8 lambda表达式中的异常处理

    文章目录 简介 处理Unchecked Exception 处理checked Exception 总结 java 8 lambda表达式中的异常处理 简介 java 8中引入了lambda表达式,l ...

  8. java中的异常处理语句_Java中实现异常处理的基础知识

    Java中实现异常处理的基础知识 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. ...

  9. Java提高篇——Java中的异常处理

    对于运行时异常.错误和检查异常,Java技术所要求的异常处理方式有所不同. 由于运行时异常及其子类的不可查性,为了更合理.更容易地实现应用程序,Java规定,运行时异常将由Java运行时系统自动抛出, ...

最新文章

  1. Deep learning调参经验
  2. 使用python通过selenium模拟打开chrome窗口报错 出现 您使用的是不受支持的命令行标记:--ignore-certificate-errors...
  3. C# 加载 SQLite DLL问题
  4. 【笔记】虚拟机用Xshell登陆报错“ssh服务器拒绝了密码”解决方法
  5. Windows 技术篇-win+R运行搜索gpedit.msc提示“MMC 不能打开文件”解决方法
  6. nagios监控mysql主从复制
  7. java使用POI工具类导出excel
  8. python中DictVectorizer的使用
  9. map集合遍历的五种方法
  10. activiti 工作流设置并行审批_activity、jbpm5、snakerflow常用工作流审批流对比
  11. 计算机专业基础 -- 数据库系统相关基础知识
  12. apicloud链接访问本地数据库
  13. 浏览器实现word在线预览
  14. NOI题库答案 (1.7 字符串基础)(21 - 25)
  15. 数据流系列-2-前后端数据传输技巧2
  16. 数据库安全性和完整性考虑_您是否考虑过云安全性?
  17. RGB颜色与颜色名称对照表
  18. C++面向对象总结——数据抽象与数据封装
  19. 1.14 循环辅助语句
  20. 孙玉 计算机教授,孙玉

热门文章

  1. qduoj - 小Z的集训队考验(拓扑排序+动态规划)
  2. cp分解实现_如何用贝叶斯高斯张量分解修复缺失数据?(Jupyter notebook - Python)
  3. 在Linux中安装R语言包,遇到无法验证下列签名的错误
  4. 12.映射表map.rs
  5. python3 Async/Await入门指南
  6. Word/Excel文档伪装病毒-kspoold.exe分析
  7. 关于寻路算法的一些思考(1):A*算法介绍
  8. 恢复SQLSERVER被误删除的数据
  9. QEMU 构建系统架构
  10. 容器化技术如何在数据中心实践