Java中的异常 Exceptions
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
Java中的异常 Exceptions的更多相关文章
- Java中的异常简介
Java中异常的分类 Java中的异常机制是针对正常运行程序的一个必要补充,一般来说没有加入异常机制,程序也能正常运营,但是,由于入参.程序逻辑的严谨度,总会有期望之外的结果生成,因此加入异常机制的补 ...
- 【Java心得总结二】浅谈Java中的异常
作为一个面向对象编程的程序员对于 下面的一句一定非常熟悉: try { // 代码块 } catch(Exception e) { // 异常处理 } finally { // 清理工作 } 就是面向 ...
- Java中的异常-Throwable-Error-Exception-RuntimeExcetpion-throw-throws-try catch
今天在做一个将String转换为Integer的功能时,发现Integer.parseInte()会抛出异常NumberFormatException. 函数Integer.parseInt(Stri ...
- Java中的异常详解
一.异常定义 阻止当前方法或作用域继续执行的问题,称为异常 二.异常分析 所有不正常类都继承Throwable类,这个类主要有两个子类Error类和Exception类.Error指系统错误 ...
- Java中的异常和处理详解
简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函数返回值作为执行状态?. ...
- java中的异常类
Java中的异常: 1. Throwable是所有异常的根,java.lang.Throwable Throwable包含了错误(Error)和异常(Exception),Exception又包含了运 ...
- Java 中的异常
前段时间集合的整理真的是给我搞得心力交瘁啊,现在可以整理一些稍微简单一点的,搭配学习 ~ 突然想到一个问题,这些东西我之前就整理过,现在再次整理有什么区别嘛?我就自问自答一下,可能我再次整理会看到不一 ...
- Java 中的异常和处理详解
Java 中的异常和处理详解 原文出处: 代码钢琴家 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误 ...
- Java 中的异常和处理详解(转载)
原文出处: 代码钢琴家 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函 ...
随机推荐
- C/C++编译、链接、运行的基础知识
0.C/C++从源文件在编译器的作用下先编译成.s的汇编,然后在汇编器的作用下变成.o的可重定向目标文件,然后在链接器的作用下变成可执行文件 1.在项目中设置的编译寻找目录中的.h文件(一般就是inc ...
- camera按键采集图像及waitKey的用法(转)
源: camera按键采集图像及waitKey的用法
- rabbitmq队列的exclusive,durability,auto-delete属性以及消息可靠传输设计
非集群下,简单的说:- 如果是excl,则设置durability没有意义,因为不管服务器挂了还是客户端主动/被动断开了,队列都会自动删除.- auto-delete,其实可简单的认为是同理,即使非e ...
- libvirt的security
1. libvirt支持SASL authentication and encryption MD5 hashes are considered unsafe and should not be us ...
- [J2EE]struts+ejb笔记
DispatchAtion: - org.apache.struts.actions.DispatchAction 这个类是个抽象类,但实现父类Action的execute方法,在项目中重写这个类可以 ...
- applyColorMap()研究(如果我对现有的colormap不满意,那么如何具体来做)
cv::applyColorMap()能够实现预定义的伪彩色,这个是众所周知的事情. 并且和matlab提供的很相近 除了这些预置的变换,如果我想实现新的变换,需要做LUT变换 cv::Mat ...
- 【4opencv】CLR基本原理和如何运用于GOCW
GOCW的重点和难点就在于Csharp调用OpenCV,其中的桥梁就是CLR,当然我们也有其他方法,但是CLR是一个比较新的.比较可靠的.关键是能用的桥梁.这里关于CLR的基本原理知识.如何用于GOC ...
- bzoj 3522 / 4543 [POI 2014] Hotel - 动态规划 - 长链剖分
题目传送门 bzoj 3522 需要root权限的传送点 bzoj 4543 快速的传送点 慢速的传送点 题目大意 给定一棵树,问有多少个无序三元组$(x, y, z)$使得这三个不同点在树上两两距离 ...
- selenium css定位方式
- topcoder srm 415 div1
problem1 link 每次贪心地从crans由大到小地找到一个能搬得动地尽量大地box即可. problem2 link 首先,$hava$可以全部换成钱,然后就是找到一个最小的钱减去自己已有的 ...