开一个新的系列,主要记一些琐碎的重要的知识点,把书读薄才是目的...特点: 代码少,概念多...

1. 基本概念

异常是在当前环境下无法获得必要的信息来解决这个问题,所以就需要从当前环境跳出,就是抛出异常.
抛出异常后发生的几件事: 1.在堆上创建异常对象. 2.当前的执行路径中止
                                         3. 当前环境抛出异常对象的引用.
                                         4. 异常处理机制接管程序.

2. 异常结构

Throwable是Error和Exception的基类.
Error表示编译时和系统错误(除特殊情况外一般不用你关心),Exception是可以抛出的基本类型.
运行时异常(RuntimeExcption),他们会自动被虚拟机抛出,就是编写的方法中不需要显示的抛出RuntimeException. 运行时异常被称为"不受检查异常",这种异常属于错误,将被自动捕获,不需要你亲自动手.
RuntimeException代表的是编程错误:

  • 无法预料的错误.比如在你控制范围之外传进来的null引用.
  • 作为程序员,这个异常是应该在代码中进行检查的错误,比如 ArrayIndexOfBoundsException,就是因为没有检查一下数组的大小.

3. finally作用

注意点:

  • 无论try 子句中异常是否抛出,finally子句总能被执行.
  • 当涉及到break和continue子句时,finally子句也会执行.

finally主要用来把出内存之外的资源恢复到它们的初始状态: 已经打开的文件和网络连接.

4.  异常的限制

当子类覆盖父类的方法,只能抛出在基类方法的异常声明中列出的那些异常,只有这样使用基类的代码才能应用在其派生类的对象上, 就是体现了面向对象的思想.

以下代码摘自java编程思想第12章,12.9节.只粘贴了部分.

class BaseballException extends Exception {}
class Foul extends BaseballException {}
class Strike extends BaseballException {} abstract class Inning {
public Inning() throws BaseballException {} public abstract void atBat() throws Strike, Foul;
public void walk() {} // Throws no checked exceptions
} class PopFoul extends Foul {}
public class StormyInning extends Inning {
// OK to add new exceptions for constructors, but you
// must deal with the base constructor exceptions:
public StormyInning()
throws RainedOut, BaseballException {}
// Overridden methods can throw inherited exceptions:
public void atBat() throws PopFoul {}
}

5. 构造器中的异常

构造器会把对象设置成安全的初始状态,但还会有别的动作,比如打开一个文件,在使用完毕后才能关闭文件. 但是如果在构造器中抛出了异常,请李行为就不能正常工作,比如关闭文件.

比如以下这个类:

public class InputFile {
private BufferedReader in; public InputFile(String fname) throws Exception {
try {
in = new BufferedReader(new FileReader(fname));
// Other code that might throw exceptions
} catch(FileNotFoundException e) {
System.out.println("Could not open " + fname);
// Wasn't open, so don't close it
throw e;
} catch(Exception e) {
// All other exceptions must close it
try {
in.close();
} catch(IOException e2) {
System.out.println("in.close() unsuccessful");
}
throw e; // Rethrow
} finally {
// Don't close it here!!!
}
}
public String getLine() {
String s;
try {
s = in.readLine();
} catch(IOException e) {
throw new RuntimeException("readLine() failed");
}
return s;
}
public void dispose() {
try {
in.close();
System.out.println("dispose() successful");
} catch(IOException e2) {
throw new RuntimeException("in.close() failed");
}
}
} ///:~

当抛出FileNotFoundException时, FileReader构造失败,这时文件都没有找到,当然没必要关闭文件,所以在最外层的try,finally中没有关闭输入流.

异常笔记--java编程思想的更多相关文章

  1. 学习笔记-Java编程思想

    2016-01-03 Swith(整数选择因子):必须是int或char这样的整数值. Java中不包含goto语句,但是可以通过标识符实现类似的控制.

  2. 《Java编程思想》学习笔记(二)——类加载及执行顺序

    <Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...

  3. Java编程思想重点笔记(Java开发必看)

    Java编程思想重点笔记(Java开发必看)   Java编程思想,Java学习必读经典,不管是初学者还是大牛都值得一读,这里总结书中的重点知识,这些知识不仅经常出现在各大知名公司的笔试面试过程中,而 ...

  4. Java编程思想总结笔记The first chapter

    总觉得书中太啰嗦,看完总结后方便日后回忆,本想偷懒网上找别人的总结,无奈找不到好的,只好自食其力,尽量总结得最好. 第一章  对象导论 看到对象导论觉得这本书 目录: 1.1 抽象过程1.2 每个对象 ...

  5. 《Java编程思想》读书笔记

    前言 这个月一直没更新,就是一直在读这本<Java编程思想>,这本书可以在Java业界被传神的一本书,无论谁谈起这本书都说好,不管这个人是否真的读过这本书,都说啊,这本书很好.然后再看这边 ...

  6. JAVA编程思想读书笔记(四)--对象的克隆

    接上篇JAVA编程思想读书笔记(三)--RTTI No1: 类的克隆 public class MyObject implements Cloneable { int i; public MyObje ...

  7. 《Java编程思想》阅读笔记二

    Java编程思想 这是一个通过对<Java编程思想>(Think in java)进行阅读同时对java内容查漏补缺的系列.一些基础的知识不会被罗列出来,这里只会列出一些程序员经常会忽略或 ...

  8. Java编程思想——第17章 容器深入研究 读书笔记(三)

    七.队列 排队,先进先出. 除并发应用外Queue只有两个实现:LinkedList,PriorityQueue.他们的差异在于排序而非性能. 一些常用方法: 继承自Collection的方法: ad ...

  9. Java编程思想 笔记

    date: 2019-09-06 15:10:00 updated: 2019-09-24 08:30:00 Java编程思想 笔记 1. 四类访问权限修饰词 \ 类内部 本包 子类 其他包 publ ...

随机推荐

  1. 利用反射操作bean的属性和方法

    今天在开发中碰到这样一个场景:当请求添加项目下的目录时,传过来的是一个IndexModel,这个Model里有关于这个目录字段的详细信息,包括基础报表,实时,漏斗等信息(这些字段类型都是boolean ...

  2. 多线程编程学习笔记——async和await(三)

    接上文 多线程编程学习笔记——async和await(一) 接上文 多线程编程学习笔记——async和await(二) 五.   处理异步操作中的异常 本示例学习如何在异步函数中处理异常,学习如何对多 ...

  3. javascript中的双向绑定

    阅读目录 一:发布订阅模式实现数据双向绑定 二:使用Object.defineProperty 来实现简单的双向绑定. 前言: 双向数据绑定的含义:可以将对象的属性绑定到UI,具体的说,我们有一个对象 ...

  4. 【java】io流之字符输入流:java.io.Reader类及子类的子类java.io.FileReader

    package 文件操作; import java.io.File; import java.io.FileReader; import java.io.IOException; import jav ...

  5. iOS 上线因iPv6被拒,查询服务器是否支持iPv6,mac设置iPv6网络,手机测试iPv6

    一. iOS----如何检查域名是否支持ipv6 iOS----------如何检查域名是否支持ipv6 1.检查你所用到的库,像af 3.0以上什么的(不用改),其他的库自己去搜下是否支持ipv6吧 ...

  6. 用html和css轻松实现康奈尔笔记(5R笔记)模板

    缘起 人家都说康奈尔笔记法,很好用呢,能抵抗遗忘曲线,让你的笔记事半功倍,有兴趣的同学自行百度哈. 网上有很多现成的模板,下载下来之后吧,看着好像在上面写英文可能更方便一点,行距很小,而且还有网址在上 ...

  7. HHVM源码剖析

    一.前言 hhvm源码中充满了很多C++11的新特性,并且使用了各种设计模式如工厂,模板方法等,利用智能指针包裹指针,让delete没有肆意的出现 模板,继承,explicit,纯虚函数的出现令代码中 ...

  8. NOIP2002 字符变换

    啊本来以为2002的题应该会比较友善于是很naive地像模拟一样用着stl乱玩结果死也过不了最后一个点qaq 心情很悲痛于是为了解放自我 #include<iostream> #inclu ...

  9. lesson - 8 Linux文档的压缩和打包

    内容概要:1. gzip工具语法: gzip [-d#] filename 其中#为1-9的数字,默认压缩级别为6 只能压缩文件gzip  filename 生成filename.gz 源文件消失解压 ...

  10. python 字符串中的%s与format

    你可以选择字符串拼接,你也可以选择使用%s或者是format,下面简单介绍一下它们的使用方法: # 在字符串后面跟%,然后后面加上要被替换的值 print('I like %s' % 'apples' ...