《Java编程思想》笔记 第十二章 通过异常处理错误
1.异常也是对象
- 标准异常类都有两个构造器,一个默认,一个接受字符串。
- 抛异常与方法返回类型不同,但有相似效果使当前方法退出并返回,抛异常可以看作是一种不同的返回机制。(异同点不必深究)
- Throwable类对象可被任意异常抛出,它是异常的根类。
- 异常对象中仅有的就是异常类型,其他内容一般没有。
- 一个方法内部或者内部调用其他方法抛出异常,这个方法就会在抛出异常过程中结束。
- 标识符id可能用不到但不能不写,catch要紧跟在try块之后,匹配到最合适的异常后进入catch之后的catch不再匹配,这与没有break就会继续匹配switch不同。
try{
}catch(Type1 id1){
}catch(Type2 id2){
}...
2.恢复模型
- catch不抛异常用来修复错误,或把try放入while循环里这样不断的进入try直到得到满意结果。
3.自定义异常
- 要自定义异常必须从已有异常继承。
4.将异常记录在日志中
Logger logger = logger.getLogger(ExceptionName)
StringWriter trace = new StringWriter();
printStackTrace(new PrintWriter(trace));
logger.severe(trace.toString);
5.异常说明
- 关键词 throws 跟在方法后面,如f() throws Exception,Exception1, . . .{} 意味着这个方法f可能会抛出异常列表中的异常。 关键词throw ,抛出一个异常。
6.异常类层次结构图及其个别重要的子类
1.Throwable
1.1 Error
- 错误,系统自身错误,JVM遇无法处理的错误,一般与代码无关。
1.2 Exception
- 与编程有关的所有异常基类。
- 1.2.1 IOException : 输入、输出异常
- 1.2.2 RuntimeException :运行时异常
7. 不可查的异常
- Error和RuntimeException 又称不可查的异常(unchecked exceptions)编译器不要求强制处置的异常,可不用catch接受,其他Exception为可查的异常(checked exceptions)编译器要求必须处置的异常.
8.栈轨迹
8.1 Throwable类的2个方法获取异常信息。
- String getMessage();获取异常详细信息(构造器内的添加的描述详细)
- String getLocalizedMessage(); 本地语言描述的详细信息,默认和getMessage()一样。
- toString(); 直接打印异常标识符e
8.2 打印栈轨迹
- void printStackTrace(); 输出到标准错误
- void printStackTrace(PrintStrean);输出字节流
- void printStackTrace(java.io.PrintWriter);输出到字符流
9. 重新抛出接受到的异常
- throw.e ,抛给上一级,本级后续catch不会再执行。重新抛出后栈轨迹还是原来的轨迹,更新这个信息则用throw (Exception)e.fillInStackTrace(); 这里便成了异常新的发生地,就和这里throw一个新异常一样,栈轨迹从这里开始。
10.异常链
11.finally 总能执行。
- try--(catch可无)--finally
11.1 try finally 放在循环里可以做到“程序继续执行前必须要达到某个条件”。
11.2 使资源恢复到初始状态可以finally
11.3 try块执行停止(无catch)后在执行下一步操作之前finally会立刻执行
- 在异常被抛到更高层前就会执行finally
- break、continue或者带标签时finally也会先执行
- return在finally也会先执行
11.4 可能造成原异常丢失的finally用法:
- finally里产生另一个异常
- finally里return。一般这种异常是运行时异常。
12.异常的限制
- 覆盖方法时只能抛出基类方法的异常列表中的一种或者多种异常或者其子类异常或者不抛,但不能抛出基类没有的异常。
13.构造器异常
13.1 构造器抛了异常则创建对象后也要抛出异常,并且与构造器的完全一致。
13.2 父类构造器抛了异常,子类构造器必须抛出基类所有的异常,不可以不抛,并且可以抛出其他异常。
14.异常匹配
- 基类异常会匹配子类异常,且只匹配第一个能匹配的catch,所以在多个catch中基类和子类异常都要匹配时,子类异常catch要出现在父类catch之前,如果出现在父类之后会被父类捕获匹配子类catch永远也不会被匹配,所以会报错。
15.异常原则
- 异常处理一个原则就是:只有知道了如何处理异常才去捕获这个异常,否则就可能发生吞食,既异常发了却不知道。
《Java编程思想》笔记 第十二章 通过异常处理错误的更多相关文章
- java编程思想读书笔记 第十二章 通过异常处理错误(下)
1.异常的限制 当覆盖方法的时候,仅仅能抛出在基类方法的异常说明里列出的那些异常. 这意味着,当基类使用的代码应用到其派生类对象的时候,一样能够工资,异常也不例外. 以下的样例是在编译时施加在异常上面 ...
- 《深入理解Java虚拟机》笔记--第十二章、Java内存模型与线程
主要内容:虚拟机如何实现多线程.多线程之间由于共享和竞争数据而导致的一系列问题及解决方案. Java内存模型: Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储 ...
- java编程思想笔记(1)
java编程思想笔记(1) 一,对象的创建和生命周期 对象的数据位于何处?怎样控制对象的生命周期? 在堆(heap)的内存池中动态地创建对象. java完全采用了动态内存分配方式. 二,垃圾回收器 自 ...
- Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验
Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...
- Java编程思想 笔记
date: 2019-09-06 15:10:00 updated: 2019-09-24 08:30:00 Java编程思想 笔记 1. 四类访问权限修饰词 \ 类内部 本包 子类 其他包 publ ...
- [CSAPP笔记][第十二章并发编程]
第十二章 并发编程 如果逻辑控制流在时间上是重叠,那么它们就是并发的(concurrent).这种常见的现象称为并发(concurrency). 硬件异常处理程序,进程和Unix信号处理程序都是大家熟 ...
- 《Linux命令行与shell脚本编程大全》 第二十二章 学习笔记
第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系后代,ash shell是Unix系统上原来地Bourne shell的简化版本 ...
- #Java编程思想笔记(一)——static
Java编程思想笔记(一)--static 看<Java编程思想>已经有一段时间了,一直以来都把笔记做在印象笔记上,今天开始写博客来记录. 第一篇笔记来写static关键字. static ...
- 2.1(java编程思想笔记)位移操作
java位移操作主要有两种: 有符号位移:有符号位移会保留原有数字正负性,即正数依然是正数,负数依然是负数. 有符号位左移时,低位补0. 有符号右移时:当数字为正数,高位补0.当数字为负时高位补1. ...
随机推荐
- linux备忘录-例行性工作排程 (crontab)
例行性工作排程 例行性工作排程分为两类 at at是只执行一次就结束的指令安排.要想使用at,必须要有atd服务的支持. crontab crontab是每隔一段时间自动执行的指令安排.crontab ...
- 算法(9)Find the Duplicate Number
一个数组中的长度是n+1,里面存放的数字大小的范围是[1,n],根据鸽巢原理,所以里面肯定有重复的数字,现在预定重复的数字就1个,让你找到这个数字! http://bookshadow.com/web ...
- 【转】Java线程系列:Callable和Future
一.前言 在研究JDK1.8的CompletableFuture时,顺道将Futrue一起扫了盲~这篇博文纯转载 二.正文 本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一 ...
- 正式进军Matlab图像处理
Matlab取整函数有:fix, floor, ceil, round,具体应用方法如下: 1. fix朝零方向取整,如fix(-1.3) = -1; fix(1.3) = 1; 2. floor顾名 ...
- 理解NLP中的卷积神经网络(CNN)
此篇文章是Denny Britz关于CNN在NLP中应用的理解,他本人也曾在Google Brain项目中参与多项关于NLP的项目. · 翻译不周到的地方请大家见谅. 阅读完本文大概需要7分钟左右的时 ...
- P1641 [SCOI2010]生成字符串
P1641 [SCOI2010]生成字符串 题目描述 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不 ...
- 安徽师大附中%你赛day5 T3 树上行走 解题报告
树上行走 题目背景 \(\mathrm{Smart}\) 的脑洞非常大, 经常幻想出一些奇怪的东西. 题目描述 某一天,\(\mathrm{Smart}\) 幻想出了一棵没有边际的二叉树,脑补着在那棵 ...
- lwIP配置文件opt.h和lwipopts.h
如何去配置lwip,使它去适合不同大小的脚,这就是lwIP的配置问题.尤其是内存的配置,配置多了浪费,配置少了跑不了或者不稳定(会出现的一大堆莫名奇妙的问题,什么打开网页的速度很慢啊?什么丢包啊,什么 ...
- mysql_存储过程和函数
存储过程和函数 1.什么是存储过程和函数 存储过程和函数是事先经过编译并存储在数据库中的一段SQL语句集合,调用存储过程和函数可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对 ...
- Spring Boot(一)
1.注解 @EnableAutoConfiguration 官方文档:The @EnableAutoConfiguration annotation is often placed on your ...