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异常--读书笔记的更多相关文章

  1. java effective 读书笔记

    java effective 读书笔记 []创建和销毁对象 静态工厂方法 就是“封装了底层 暴露出一个访问接口 ” 门面模式 多参数时 用构建器,就是用个内部类 再让内部类提供构造好的对象 枚举 si ...

  2. Java并发读书笔记:线程安全与互斥同步

    目录 导致线程不安全的原因 什么是线程安全 不可变 绝对线程安全 相对线程安全 线程兼容 线程对立 互斥同步实现线程安全 synchronized内置锁 锁即对象 是否要释放锁 实现原理 啥是重进入? ...

  3. 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域

    深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理 ...

  4. 单元测试之道Java版——读书笔记

    单元测试知道Java版读书笔记 首先我们必须要知道我们所写的代码,它的功能是什么,如果我们不了解代码的行为,那么也就无从测试. 我们测试的目的,是为了我们整个程序架构的稳定,代码其实就是欧文要实现功能 ...

  5. 《practical Java》读书笔记

    题记: 花了一周把Peter Haggar的<practical Java>看了遍,有所感悟,年纪大了, 写下笔记,方便日后查看.也希望有缘之人可以看看,做个渺小的指路人. 不足之处还望指 ...

  6. 《Head First Java》读书笔记(3) - 异常和IO

    1.异常处理 我们在调用某个方法时,会被编译器告知需要捕捉异常和处理,意味着你调用的这个方法是有风险的,可能会在运行期间出状况,你必须写出在发生状况时加以处理的代码,未雨绸缪!这就是Java中异常处理 ...

  7. 《Effective Java》读书笔记八(异常)

    No57 只针对异常的情况才使用异常 异常应该只用于异常的情况下,它们永远不应该用于正常的控制流. No58 对可恢复的情况使用受检异常,对编程错误使用运行时异常 Java程序设计语言提供了三种可抛出 ...

  8. 《Effective Java》读书笔记 - 9.异常

    Chapter 9 Exceptions Item 57: Use exceptions only for exceptional conditions 这条item的意思就是,千万不要用except ...

  9. 《Effective java》-----读书笔记

    2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...

随机推荐

  1. (一)使用springAPI以及自定义类 实现AOP-aop编程

    Spring的另一个重要思想是AOP,面向切面的编程,它提供了一种机制,可以在执行业务前后执行另外的代码,Servlet中的Filter就是一种AOP思想的体现,下面通过一个例子来感受一下. 假设我们 ...

  2. 使用fragment兼容低版本的写法

      [1]定义fragment继承V4包中的Fragment    [2]定义的activity要继承v4包中的FragmentActivity   [3]通过这个方法getSupportFragme ...

  3. Android最佳性能实践(三)——高性能编码优化

    在前两篇文章当中,我们主要学习了Android内存方面的相关知识,包括如何合理地使用内存,以及当发生内存泄露时如何定位出问题的原因.那么关于内存的知识就讨论到这里,今天开始我们将学习一些性能编码优化的 ...

  4. VirtualBox没有64位选项,无法安装64位的解决方法(zhuan)

    http://www.askmaclean.com/archives/vbox-virtualbox-64-bit.html ************************************* ...

  5. ITERATOR(迭代器)设计模式

    1 意图:提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 2 别名(Cursor) 3 动机:队列表的访问和遍历从列表对象中分离出来放入一个迭代器对象中.   多态迭代   ...

  6. GreenPlum简单性能测试与分析

    版权声明:本文由黄辉原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/195 来源:腾云阁 https://www.qclou ...

  7. bzoj题解汇总(1032~1051)

    bzoj1034:贪心 bzoj1036:树剖 bzoj1037:一个比较巧妙,利用连续性维护的dp. http://www.cnblogs.com/Sdchr/p/6129496.html bzoj ...

  8. 设置DIV最小高度以及高度自适应随着内容的变化而变化

    <!--退租账单--> <div id="bilsli" onmouseover="showBill(this)"> #bilsli{ ...

  9. win7开启硬盘AHCI

    问题描述:装win7的时候没有在AHCI模式下安装,而是在IDE模式下安装的,后来安装完毕以后想更改成AHCI模式,可是更改以后启动电脑蓝屏并重启 解决方法: 如果是在IDE模式下安装的系统,由于在安 ...

  10. HDUoj-------(1128)Self Numbers

    Self Numbers Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...