Java异常--读书笔记
1. Java将异常分为两种:Checked异常和Runtime异常,Java认为Checked异常都是可以在编译阶段被处理的异常,所以强制程序处理所有的Checked异常;Runtime异常则无需处理。
2. Java的异常处理机制可以让程序具有更好的容错性,让程序更加健壮。当程序运行出现意外情形时,系统会自动生成一个Exception对象来通知程序,从而实现“业务代码”和“错误处理”相分离。因此我们希望有一种非常强大的if块,可以表示所有的错误情况,让程序一次性处理所有的错误,也就是希望将错误集中处理。
3. try块内声明的变量是代码块局部变量,它只在try块内有效。
4. 有时候,程序在try块里打开了一些物理资源,如数据库连接,网络连接或磁盘文件等,这些物理资源都必须得显式回收。
5. Java的垃圾回收机制不会回收任何物理资源,只回收堆内存中对象所占的资源。
6. 除非在try块、catch块中调用了退出虚拟机的方法,否则不管在try块、catch块中执行怎样的代码,出现怎样的情况,异常处理的finally块总会被执行。
7. 应尽量避免在finally块里执行return或者throw等导致方法终止的语句,因为当Java程序执行try块时遇到return或者throw语句,这两个语句会导致该方法立即结束,但是系统执行这两个语句并不会结束该方法,而是去寻找异常处理流程中是否有finally语句块,如果没有,return或者throw立即执行,结束方法;如果有,系统执行finally块---只有当finally块执行完成之后,系统才会再次跳回执行return或者throw语句,如果finally块里面也有return或者throw等导致方法终止的语句,finally块已经终止了该方法,那么try块中的return或者throw语句将不会被执行(try块或者catch块)。
8. Java7之后允许在try关键字之后跟一个圆括号,可以声明或者初始化一个或多个需要在程序结束时关闭的资源,代码如下:
try (BufferReader br = new BufferReader(new FileReader("***.java"))) {
br.readLine();
}
这样,就不需要finally语句块了,不过BufferReader必须实现Closeable或者AutoCloseable接口才行。
9. Java的异常被分为Checked异常和Runtime异常,其他语言并没有提供Checked异常,Java认为Checked异常都是可以被处理的异常,所以程序必须显式的处理,如果不处理,则无法编译通过。这种设计体现了Java非常严谨的设计哲学,但是大部分的方法总是不能明确的知道如何处理异常,因此只能抛出,而这种方法很普遍,导致降低了程序的生产率和代码的执行效率,这在Java领域是一个比较受争议的问题。
10. 使用throws关键字抛出异常,基本思路是:当前方法不知道如何处理这种类型的异常,那么将之抛出,由调用它的方法去处理,如果main方法也不知道如何处理,也可以抛出,此时异常将交由JVM处理。JVM的处理方法是:打印异常的跟踪栈信息,并终止程序运行,这也是为什么程序遇到异常后自动结束的原因。
public static void main(String[] args) throws IllegalAccessException{}
如上,调用main方法的方法或者try catch异常,或者继续抛出。
11. 如此可见,使用Checked异常有两大不便之处:
1>.Java要求显式处理,增加了编程复杂度;
2>.如果该方法被重写,根据继承的基本原则,重写后的方法只能抛出父类方法中异常的子类或者相同;
因此,当程序需要自行抛出异常时,使用Runtime异常更为简洁。当然,如果程序需要在合适的地方对异常进行处理,则一样可以使用try catch来捕获。
12. 使用Runtime异常比较省事,即可以享受“正常代码和错误处理代码分离”,又可以避免使用Checked异常带来的编程繁琐性。因此,C#、Ruby、Python等都没有Checked异常。
13. 使用throw抛出异常
当程序出现错误时,系统会自动抛出异常,除此之外,Java也允许程序自行抛出异常,又throw来完成。异常是一种主观的说法,因为在不同的场合,异常不见得是异常。因此是否要抛出异常,应根据应用的业务需求来决定,而这种与业务需求不符产生的异常,必须由程序员来决定是否抛出,系统无法抛出这种异常。
Java异常--读书笔记的更多相关文章
- java effective 读书笔记
java effective 读书笔记 []创建和销毁对象 静态工厂方法 就是“封装了底层 暴露出一个访问接口 ” 门面模式 多参数时 用构建器,就是用个内部类 再让内部类提供构造好的对象 枚举 si ...
- Java并发读书笔记:线程安全与互斥同步
目录 导致线程不安全的原因 什么是线程安全 不可变 绝对线程安全 相对线程安全 线程兼容 线程对立 互斥同步实现线程安全 synchronized内置锁 锁即对象 是否要释放锁 实现原理 啥是重进入? ...
- 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域
深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理 ...
- 单元测试之道Java版——读书笔记
单元测试知道Java版读书笔记 首先我们必须要知道我们所写的代码,它的功能是什么,如果我们不了解代码的行为,那么也就无从测试. 我们测试的目的,是为了我们整个程序架构的稳定,代码其实就是欧文要实现功能 ...
- 《practical Java》读书笔记
题记: 花了一周把Peter Haggar的<practical Java>看了遍,有所感悟,年纪大了, 写下笔记,方便日后查看.也希望有缘之人可以看看,做个渺小的指路人. 不足之处还望指 ...
- 《Head First Java》读书笔记(3) - 异常和IO
1.异常处理 我们在调用某个方法时,会被编译器告知需要捕捉异常和处理,意味着你调用的这个方法是有风险的,可能会在运行期间出状况,你必须写出在发生状况时加以处理的代码,未雨绸缪!这就是Java中异常处理 ...
- 《Effective Java》读书笔记八(异常)
No57 只针对异常的情况才使用异常 异常应该只用于异常的情况下,它们永远不应该用于正常的控制流. No58 对可恢复的情况使用受检异常,对编程错误使用运行时异常 Java程序设计语言提供了三种可抛出 ...
- 《Effective Java》读书笔记 - 9.异常
Chapter 9 Exceptions Item 57: Use exceptions only for exceptional conditions 这条item的意思就是,千万不要用except ...
- 《Effective java》-----读书笔记
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...
随机推荐
- boost线程的问题:
可以看看这里:http://blog.csdn.net/misskissc/article/details/9859753 我的总结: 1,用thread类来创建一个线程,它的构结函数 : (1)th ...
- JavaWeb 7 Servlet
7 Servlet Servlet学习的大纲:1. servlet概念及相关接口简介2. servet 执行过程3. servlet路径映射4. 缺省servlet --应用5. s ...
- D3.js 坐标轴
坐标轴,是可视化图表中经常出现的一种图形,由一些列线段和刻度组成.坐标轴在 SVG 中是没有现成的图形元素的,需要用其他的元素组合构成. D3 提供了坐标轴的组件,如此在 SVG 画布中绘制坐标轴变得 ...
- Linux计划任务入门详解
Linux操作系统定时任务系统 Cron 入门 cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业.由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动 ...
- Mysql 联结表
- phalcon:非空字段不能在beforeCreate赋值,可以改用beforeValidationOnCreate
phalcon非空字段不能在beforeCreate赋值 碰到了这个问题,不知道什么原因记录一下. 表users: action_act 字段 varchar 10 not null,非空字段, 在 ...
- De novo 测序基础知识
名词解释 De novo:拉丁文,从头开始的意思,de nove测序则是指在不需要任何参考序列的情况下对某一物种进行基因组测序,然后将测得的序列进行拼接.组装,从而绘制该物种的全基因组序列图谱. 重测 ...
- 清理无用的CSS样式的几个工具(转)
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- js时间显示设置
//对日期中部分小于10的数字前边添加0 function zero(s){ return s < 10 ? '0' + s: s; } var date=new Date(), year = ...
- VBA中四种自动运行的宏以及模块的含义
在Excel的“标准模块”中可以创建4种自动运行的宏,它们分别是Auto_Open(打开工作 簿时自动运行), Auto_Close, Auto_Activate, Auto_Deactivate. ...