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

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. inline-block解决

    一.现象描述 真正意义上的inline-block水平呈现的元素间,换行显示或空格分隔的情况下会有间距 二.方法之移除空格 元素间留白间距出现的原因就是标签段之间的空格,因此,去掉HTML中的空格,自 ...

  2. Lua的数学函数

    ua5.1中数学库的所有函数如下表: ​ math.pi 为圆周率常量 = 3.14159265358979323846 函数名 函数功能 示例 示例结果 abs 取绝对值 math.abs(-15) ...

  3. All-In-One方式-安装openstack

    ALL-IN-ONE安装openstack******************************************************************************* ...

  4. .net core系列之初识asp.net core

    .net core已经发布了2.0版本,相对于1.0的有了很大的完善,最近准备在项目中尝试使用asp.net core,所以就进行了一些简单的研究. 初识asp.net core分为以下几个部分: 1 ...

  5. PHP对象注入 PHP Object Injection

    From:PHP Object Injection Last revision (mm/dd/yy): 01/7/2015 译者:李秋豪 Wednesday, 24. May 2017 05:48PM ...

  6. [UWP]了解模板化控件(7):支持Command

    以我的经验来说,要让TemplatedControl支持Command的需求不会很多,大部分情况用附加属性解决这个需求会更便利些,譬如UWPCommunityToolkit的HyperlinkExte ...

  7. Influxdb1.2.2安装

    一.文件准备 1.1 文件名称 influxdb-1.2.2.x86_64.rpm 1.2 下载地址 https://portal.influxdata.com/downloads [注意.注意.注意 ...

  8. 【十八】php文件下载源码

    index.php <!DOCTYPE html> <html> <head> <title></title> <meta chars ...

  9. Mac和Xcode常用的快捷键

    Mac电脑一般都不怎么用鼠标,因此除了触摸屏的各种双指.三指甚至四指的操作之外,快捷键的使用可以带来非常大的便利,本文则主要收集整理了自己在Mac常规和Xcode开发过程中常用的一些快捷键. 一.Ma ...

  10. Swift tableview自带的刷新控件

    import UIKit class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource { let ...