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语言风格:用函 ...
随机推荐
- php学习路线(转)
作者:Summer链接:https://www.zhihu.com/question/20034403/answer/135433912来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...
- The Little Prince-12/02
The Little Prince-12/02 What moves me so deeply, about this little prince who is sleeping here, is h ...
- @RefreshScope 的作用
让在application.properties里自定义的变量也能通过@Value 注解正常注入
- Android NDK MediaCodec在ijkplayer中的实践
https://www.jianshu.com/p/41d3147a5e07 从API 21(Android 5.0)开始Android提供C层的NDK MediaCodec的接口. Java Med ...
- MySQL SELECT练习题*28
-- (1)用子查询查询员工“张小娟”所做的订单信息. SELECT * FROM order_master WHERE saler_no = ( SELECT employee_no FROM em ...
- kswapd0 进程CPU占用过高
前几天遇到的一个问题,自己本地用VM配置的虚拟机,一般会top查看进程以及CPU占用的一些情况.又一次用laravel 打印对象,里面的内容比较多,浏览器当时就卡了. 然后看进程的情况.我以为会是ng ...
- P2709 小B的询问(莫队)
P2709 小B的询问 莫队模板 资磁离线询问 维护两个跳来跳去的指针 先分块,蓝后询问按块排序. 蓝后每次指针左右横跳更新答案 #include<iostream> #include&l ...
- netstat -ano输出中的ESTABLISHED off
今天,我们性能测试的环境出现个奇怪现象,通过oci direct load回库的进程似乎僵死了,应用端cpu 200%(两个线程在跑,一个是一直在ocidirectload没反应,另外一个是正在sem ...
- ERROR 1526 (HY000): Table has no partition for value xxx
最近,我们有些功能需要使用到基于多个字段的分区,需要同时支持oracle/mysql,但是开发人员又希望尽可能少的改动业务代码,也不愿意使用多列分区,在oracle 11g之前,不支持多列分区(12. ...
- dell win 10笔记本关闭多媒体键,启用功能键的快捷方式
自从使用win 10之后,在使用快捷键方面就没有win 7之前来的顺手,比如F8切换投影仪,F5/F6调试等等.特地搜了下,使用Fn+Esc可以在功能键和多媒体键之间切换.