Java疯狂讲义读书笔记第十章
Java异常处理机制主要依赖于try,catch,finally,throw,throws五个关键字,try里面放置可能引发异常的代码块,catch后对应异常处理的一个代码块,finally主用于回收在try里打开的物理资源,异常机制保证finall一定会被执行。throws用于方法签名中,声明该方法可能抛出的异常,throw用于抛出一个实际的异常。
只要执行代码出现了异常,系统就会自动生成一个异常对象,如果没有为这个异常定义cache块,程序就在此退出。
抛出异常:执行try里代码出现异常,系统自动生成一个异常对象,该对象提交到运行时环境的过程。
- 捕获异常:Java运行时环境收到异常后,寻找处理该异常的catch块,找到后交给catch处理的过程。父类异常的cache块应该在子异常后。
Java把所有非正常情况分为两种:异常(Exception)和错误(Error)。他们都继承父类Throwable。
IndexOutOfBoundsException // 数组越界异常 NumberFormatException // 数字格式化转换异常,输入的不是数字字符串 ArithmeticException // 算术异常,比如除0异常 NullPointerException // 空指针异常,引用变量没有值
- Java7提供多异常捕捉机制,一个catch可以响应多个异常,多个异常之间用 | 隔开,捕捉多个异常时,异常变量为隐式的final,所以不能重新赋值。
访问异常信息,访问cache块中异常对象的相关信息,通过访问cache块后异常形参获得。
getMessage(); // 返回描述异常的字符串 printStackTrace(); // 将该异常的跟踪栈信息输出到标准错误输出 printStackTrace(PrintStream s); // 将该异常的跟踪栈信息输出到指定输出流 getStackTrace(); // 返回该异常的跟踪栈信息
- 程序在try里打开了一些物理资源,这些物理资源都必须显示回收。finally块用于回收在try里打开的物理资源。
- Java的垃圾回收不会回收任何物理资源,只能回收堆内存中对象所占用的内存。
- 不管是否try是否引发异常,cache是否被执行,除非在try、catch块中退出虚拟机(return也会执行finally),否则finally总是会被执行。
- Java7提供自动关闭资源的try,在try后紧跟一对圆括号,括号里声明、初始化一个或多个资源(这些资源类必须实现AutoCloseable或Closeable接口,必须实现close()方法)。try语句在该语句结束时自动关闭这些资源。
- Java的异常分为两大类,Checked和Runtime异常。Checked异常在程序编译时就会发生错误,无法通过编译。
- 如果当前方法不知道如何处理方法本身会引发的异常,则使用throws 声明 抛出。让上一级调用者处理。若main方法也无法处理则抛出给JVM虚拟机,虚拟机会打印异常的跟踪栈信息,并终止程序运行。
方法一旦使用throws抛出,本身就不需要使用try…catch来捕获了。在调用该方法时,要么放在try中捕获,要么放在另一个带throws声明抛出的方法中。
- 对于程序中的Checked异常,Java要求必须显式捕获并处理该异常,或者显式声明抛出该异常。
- 如果早方法中显示声明抛出Checked异常,将会导致方法签名与异常耦合,如果该方法是重写父类的方法,则该方法抛出的异常还会受到被重写方法抛出的异常限制。
在程序中自行抛出异常,使用throw。
throw与throws的比较
- throws出现在方法函数头;而throw出现在函数体。
- throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常对象。
- 两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。
自定义异常,继承Exception。
public class MyException extends Exception{public MyException(String msg){super(msg);}
}
Java疯狂讲义读书笔记第十章相关推荐
- Java编程思想读书笔记——第十章:内部类
第十章 内部类 将一个类的定义放在另一个类的内部,这就是内部类 内部类和组合是完全不同的概念,内部类了解外部类 10.1 创建内部类 创建就好,好像没啥可说的,直接来上练习: 练习1:(1)编写一个名 ...
- 《Java疯狂讲义》第3章(数据类型和运算符):博主李俊德的阅读笔记与知识拓展
一.问题背景 博主在准备应聘的笔试.面试时,再次采用了多年以来的Java工具书<Java疯狂讲义>,并决定在每章详细复习后都要在博客中写下详细的阅读笔记. 二.阅读笔记与知识拓展--< ...
- Java核心技术卷一读书笔记
文章目录 Java核心技术卷一读书笔记 第一章 Java程序设计概述 1.1 关键特性 第二章 Java程序设计环境 2.1 使用命令行工具 第三章 Java的基本查询设计结构 3.1 数据类型 3. ...
- [转载]Java完美经典读书笔记
java完美经典读书笔记 第一章 概述 第二章 JAVA语言基础 ※关键字: 基本数据类型: byte short int char long float double boolean 循环控 ...
- JAVA编程思想读书笔记(三)--RTTI
接上篇JAVA编程思想读书笔记(二) 第十一章 运行期类型判定 No1: 对于作为程序一部分的每个类,它们都有一个Class对象.换言之,每次写一个新类时,同时也会创建一个Class对象(更恰当的说, ...
- 《Head First Java》20201023读书笔记
P413-P <Head First Java>20201023读书笔记 操作Swing组件 几个常用组件:text field.可滚动的text area.checkbox以及list. ...
- 尽信书,不如无书。java的包装类Integer的深入理解及特殊情况(以及java疯狂讲义第5版170页中的错误)
1.通常情况下,两个包装类型只有在两个引用指向同一对象时,使用 == 进行比较时才会返回true 例如: Double do1 = Double.valueOf(1.23); Double do2 = ...
- java疯狂讲义第八章-集合
8. java疯狂讲义第八章-集合 Java 集合就像一种容器, 可以把多个对象(实际上是对象的引用,但习惯上都称对象) "丢进"该容器中. java集合分为Set.List.Qu ...
- Java编程思想读书笔记(七)
点击蓝字 关注我们 今天是端午节,在这里祝大家端午节安康.过节的同时也不要忘记知识储备,今天我 为大家带来了Java编程思想第七节多形性读书笔记.请大家一起品鉴,如果发现里面有啥写的不对的地方,请大家 ...
- 疯狂python讲义学习笔记——中十章完结
#第十一章 thinker import tkinter as tk print(help(tk.Button.__init__))#以按扭为例查看有什么属性 class myApplication( ...
最新文章
- 推荐8款有趣实用的软件,建议你先收藏,总有一天你会用到
- javax消息队列_java实现消息队列的两种方式(小结)
- LeetCode算法题3:求最大子序列和
- Java课程作业02
- [Swift]LeetCode793. 阶乘函数后K个零 | Preimage Size of Factorial Zeroes Function
- SAP Business ByDesign 和支付宝与钉钉集成的一个原型开发案例
- .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门
- java之包装类与BigInteger、BigDecimal
- cygwin This indicates that the /etc/passwd (and possibly /etc/group) files should be rebuilt 问题解决办法
- windows.old可以删除吗_C盘里的文件夹都有何用?可以删除吗?哪些可以删除?
- 关于职场的6个深刻道理,每个都是血泪教训换来的,你一定要懂
- linux命令(日常更新)
- 如何编写高质量的程序
- 【第18周复盘】要不要带小朋友们参加一下天池的Python训练营?
- mui获取手机设备信息
- Blender建模模块:把顶点压平的优雅姿势
- oracle中的crs,Oracle CRS简介
- FormatdataLibsvm.xls的使用
- 全球与中国制药工艺用隔膜阀市场现状及未来发展趋势
- 分析《 yolov7人脸+手机检测模型训练》