Thinking in java 第12章 通过异常处理错误 笔记+习题

2024-01-24 21:58

本文主要是介绍Thinking in java 第12章 通过异常处理错误 笔记+习题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Thinking in java 第12章 通过异常处理错误

学习目录


12.1 概念

1. 使用一场所带来的一个好处是,它忘完更够降低错误处理代码的复杂度。如果不使用异常,那么就必须检查特定的的错误,并在程序中的许多地方去处理它。而如果使用异常,就不必在方法调用处进行检查,并且只需在一个地方处理错误,即异常处理程序中。这使得代码的阅读、编写和调试工作更加井井有条。

 

12.2 基本异常

1. 同Java其他对象的创建一样,将使用new在堆上创建异常对象。

2. 异常最重要的方面之一就是如果发生问题,他们将不允许程序沿着其正常的路径继续走下去。

3. 所有标准异常类都有两个构造器:一个是默认构造器,一个是接受字符串作为参数,以便能把相关信息放入异常对象的构造器。

throw new NullPointerException("t = null");

4. 异常返回的“地点”和普通方法调用返回的“地点”不同,可能离得很远,也可能跨越方法调用栈很多层次。

5. 能够抛出任意类型的Throwable对象是异常类型的根类。

 

12.3 捕获异常

1. 格式如下:

try{//Code that might generate exceptions
} catch (Type1 id1) {// Handle exceptions of Type1
} catch (Type2 id2) {// ...
} ...

2. 在try块内部,许多不同的方法调用可能会产生类型相同的异常,而你只需要提供一个针对此类型的异常处理程序。

3. 异常处理理论上有两种基本模型:中止模型和恢复模型。Java支持中止模型,如果想要Java实现类似恢复的行为,那么在遇到错误时就不能抛出异常,而是调用方法来修正。或者把try块放在while里,直到得到满意的结果。

 

12.4 创建自定义异常

1. 要自己定义异常类,必须从已有的异常类继承,最好是选择意思详尽的异常类继承(不过并不容易找)。

class SimpleException extends Exception {SimpleException() {}SimpleException(String msg) { super(msg); }
}public class A {public void f() throws SimpleException {print("...");throw new SimpleException();}public static void main(String[] args) {try {new A().f();} catch(SimpleException e) {print("Catch!");}}
}

2. printStackTrace()方法是在Throwable中的(Exception继承它),它将打印“从方法调用处直到异常跑出处”的方法调用序列。可加上参数“System.out”直接显示在输出中,默认版本则被输出到标准错误流(System.err)。

3. 异常与记录日志(P255例,看完18章再回来看)。

 

12.5 异常说明

1. 异常说明属于方法声明的一部分,紧跟在形式参数列表之后。

2. 可以不止一个。也可以声明了之后不抛出,但抛出后要么声明要么处理。

 

12.6 捕获所有异常

1. 举例说明了一些方法,如:printStackTrace()、getStackTrace()(用于配合后者进行遍历栈轨迹)、StackTraceElement、fillInStackTrace()(更新异常发生地)。

2. 异常链:在捕获一个异常后抛出另一个异常,并希望把原始异常信息保存下来。

3. 现在所有Throwable的子类在构造其中都可以机收一个cause对象作为参数,而只有Error(用于Java虚拟机报告系统错误)、Exception、RuntimeException提供了带cause参数的构造器,其他类型要用initCause()方法而不是构造器。

 

12.8 使用finally进行清理

1. 对于一些代码,可能会希望无论try块中的异常是否抛出,它们都能得到执行。这通常适用于内存回收之外的情况。

try{//Code that might generate exceptions
} catch (Type1 id1) {// Handle exceptions of Type1
} catch (Type2 id2) {// ...
} finally {// ...
}

2. 用途:把除内存之外的资源恢复到它们的初始状态,包括:已经打开的文件或网络链接,在屏

这篇关于Thinking in java 第12章 通过异常处理错误 笔记+习题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/641142

相关文章

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

Java CompletableFuture如何实现超时功能

《JavaCompletableFuture如何实现超时功能》:本文主要介绍实现超时功能的基本思路以及CompletableFuture(之后简称CF)是如何通过代码实现超时功能的,需要的... 目录基本思路CompletableFuture 的实现1. 基本实现流程2. 静态条件分析3. 内存泄露 bug

Java中Object类的常用方法小结

《Java中Object类的常用方法小结》JavaObject类是所有类的父类,位于java.lang包中,本文为大家整理了一些Object类的常用方法,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. public boolean equals(Object obj)2. public int ha

SpringBoot项目中Maven剔除无用Jar引用的最佳实践

《SpringBoot项目中Maven剔除无用Jar引用的最佳实践》在SpringBoot项目开发中,Maven是最常用的构建工具之一,通过Maven,我们可以轻松地管理项目所需的依赖,而,... 目录1、引言2、Maven 依赖管理的基础概念2.1 什么是 Maven 依赖2.2 Maven 的依赖传递机

SpringBoot实现动态插拔的AOP的完整案例

《SpringBoot实现动态插拔的AOP的完整案例》在现代软件开发中,面向切面编程(AOP)是一种非常重要的技术,能够有效实现日志记录、安全控制、性能监控等横切关注点的分离,在传统的AOP实现中,切... 目录引言一、AOP 概述1.1 什么是 AOP1.2 AOP 的典型应用场景1.3 为什么需要动态插

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

java图像识别工具类(ImageRecognitionUtils)使用实例详解

《java图像识别工具类(ImageRecognitionUtils)使用实例详解》:本文主要介绍如何在Java中使用OpenCV进行图像识别,包括图像加载、预处理、分类、人脸检测和特征提取等步骤... 目录前言1. 图像识别的背景与作用2. 设计目标3. 项目依赖4. 设计与实现 ImageRecogni

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Java访问修饰符public、private、protected及默认访问权限详解

《Java访问修饰符public、private、protected及默认访问权限详解》:本文主要介绍Java访问修饰符public、private、protected及默认访问权限的相关资料,每... 目录前言1. public 访问修饰符特点:示例:适用场景:2. private 访问修饰符特点:示例: