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并 ...
随机推荐
- TortoiseSvn
TortoiseSVN 是svn版本控制系统的一个免费开源客户端,它是svn版本控制的 Windows 扩展.可以使你避免使用枯燥而且不方便的命令行.它完全嵌入 Windows Explorer,使用 ...
- 基本分类方法——KNN(K近邻)算法
在这篇文章 http://www.cnblogs.com/charlesblc/p/6193867.html 讲SVM的过程中,提到了KNN算法.有点熟悉,上网一查,居然就是K近邻算法,机器学习的入门 ...
- iOS开发之.pch文件初识
pch全称是“precompiled header”,即预编译头文件,自Xcode6诞生之日起,便在Supporting Files文件下消失多年.说起苹果对pch的爱恨情仇,其分析pch的作用便不言 ...
- java集合和scala集合互转
使用 scala.collection.JavaConverters 与Java集合交互.它有一系列的隐式转换,添加了asJava和asScala的转换方法.使用它们这些方法确保转换是显式的,有助于阅 ...
- ios 开发 收起键盘的小技巧
在UIViewController中收起键盘,除了调用相应控件的resignFirstResponder方法外,还有另外三种方法: 1.重载UIViewController中的touchesBegin ...
- 当CanTK遇到PhoneGap
有朋友问能不能在CanTK和AppBuilder开发的APP里发送UDP数据,HTML5里只能用HTTPS/HTTP/WebSocket几种通讯方式,要使用UDP需要通过phonegap打包成APK等 ...
- centos7命令
查看ip ip addr ip link 添加服务 systemctl enable nginx 添加防火墙端口 firewall-cmd --zone=public --add-port=80/tc ...
- 能源项目xml文件标签释义--default-lazy-init
1.spring的default-lazy-init参数 spring在启动的时候,会默认加载会默认加载整个对象实例图,从初始化ACTION配置.到 service配置到dao配置.乃至到数据库连接. ...
- 3D正方体
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Python 练习 21
#!/usr/bin/python # -*- coding: UTF-8 -*- h = 0 leap = 1 from math import sqrt from sys import stdou ...