1. 概念

exception是“exceptional event”的缩写,是指执行程序中发生的事件,破坏了程序的正常执行流程。Java 异常处理机制使程序更加健壮易于调试,它可以告诉程序员三个问题:错误的类型、位置、原因,帮助程序员解决错误。

2. 类别

Throwable是Java所有异常类的顶级父类,只有这个类的对象(或者其子类对象)才能被异常处理机制识别,也就是说JVM或者throw语句抛出的异常必须是Throwable或者子类对象,catch语句处理的异常类也是如此。

整体上来看,Java异常可以分为三类

检查异常:除了Error、RuntimeException及其子类所表示的异常,其他都为检查异常,意味着编译器在编译源码时,会对此类异常的处理进行检查,如果没有做异常处理(try、catch、finally或者throws),编译无法通过。比如使用 java.io.FileReader 类读取指定文件,文件不存在会抛出 java.io.FileNotFoundException 异常,这个异常在编码时必须被处理。

运行时异常:RuntimeException及其子类表示的异常,javac在编译时不会检查的异常,这类异常更多的是代码写的有问题,如除0错误ArithmeticException,这类异常应该修改代码,而不是使用异常处理器处理。

错误:Error及其子类,代表了JVM本身的错误。错误不等于异常,不能被程序员通过代码处理。出现Error,程序通常无法恢复

3. 举例

其中java.lang.ArrayIndexOutOfBoundsException为异常类型,表明了异常出现的大致原因,3是异常原因的说明,

后面打印出的是异常追踪栈(StackTrace),因为函数是层级调用的,只要其中有一个函数出现了异常,它的所有调用者都会被异常影响。
  通过查看异常,可以很容易得定位到错误发生在Test.test3()方法,第23行代码,原因是下标3越界了。

4. 捕获异常的语法

对于检查异常来说,通常有两种方式来处理异常,避免编译器检查不通过。

try、catch、finally
try语句块儿中包含可能出现异常的代码。catch语句块儿用于捕获和处理特定异常,允许存在多个catch块儿,括号中定义了异常类型与参数,JVM使用最先匹配到的catch块儿来处理异常。finally块儿是可选的,无论是否发生异常,是否匹配catch块儿,finally中的代码都会执行。主要做一些清理工作,如数据库连接的关闭。
注意:try块儿不能单独出现,至少要有一个catch块儿或者finally块儿。当执行一个方法中的某条语句时发生异常,即使异常被处理,这条语句后面的代码也不会被执行,而是会顺序执行下一个方法。
try {
}
catch (Exception e) {
}
finally {
}

throw、throws
抛出异常,方法自己不处理异常,仅仅是把异常抛给其调用者。使用throw处理异常通常的原因是:方法本身不知道如何处理异常,或者说让调用者处理更合适。

5. 原则

为了更好的使用java的异常处理机制,Jim Cushing总结了三个原则:具体明确、及早抛出、延迟捕获。

具体明确

在上文中,我们提到Java的异常类是一层一层继承而来的,为了使异常信息更加具体明确,通常使用其子类。如果需要更加具体的异常信息,也可以定义自己的异常类。比如相比于IOException,FileNotFoundException可以看做是一个更为具体化的异常。
https://blog.csdn.net/u013201439/article/details/79908225

最新文章

  1. QQ传输协议分析
  2. PowerDesigner生成Oracle数据库时,表名会带引号问题
  3. 第十章 嵌入式Linux的调用技术
  4. 2016HUAS暑假集训训练题 B - Catch That Cow
  5. 了解 JS 作用域与作用域链
  6. Java学习笔记(二十)——Java 散列表_算法内容
  7. 数据结构与算法javascript描述
  8. poj 1149 pigs(最大流)
  9. Tomcat7性能优化
  10. Linux(CentOS6.5)下Nginx注册系统服务(启动、停止、重启、重载等)&设置开机自启
  11. linux打印彩色字
  12. 结对作业NO.2
  13. ASP.NET Core 2.1 : 十一. 如何在后台运行一个任务
  14. String Match
  15. 从零开始学 Web 之 JavaScript(三)函数
  16. [转] HTML5 FormData 方法介绍以及实现文件上传
  17. spring IOC简单分析
  18. hadoop的块
  19. NIO,AIO,BIO
  20. Linux命令(六) 查看文件 cat tac more less tail

热门文章

  1. Python基础(一)_数据类型、条件判断、循环、列表
  2. jdbc连接oracle数据库问题
  3. Opencv改变图像亮度和对比度以及优化
  4. P1290 欧几里德的游戏
  5. JVM结构及堆的划分
  6. mysql不常用但很有用的语句整理
  7. Linux使用退格键时出现^H + Tab键命令补全失效/方向键失效 + ls文件夹和文件没有颜色
  8. Linux普通用户不能使用TAB键、上下键
  9. Codeforces 581F Zublicanes and Mumocrates - 树形动态规划
  10. SVM学习笔记5-SMO