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

相关文章

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

Java操作Word文档的全面指南

《Java操作Word文档的全面指南》在Java开发中,操作Word文档是常见的业务需求,广泛应用于合同生成、报表输出、通知发布、法律文书生成、病历模板填写等场景,本文将全面介绍Java操作Word文... 目录简介段落页头与页脚页码表格图片批注文本框目录图表简介Word编程最重要的类是org.apach

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

java中反射Reflection的4个作用详解

《java中反射Reflection的4个作用详解》反射Reflection是Java等编程语言中的一个重要特性,它允许程序在运行时进行自我检查和对内部成员(如字段、方法、类等)的操作,本文将详细介绍... 目录作用1、在运行时判断任意一个对象所属的类作用2、在运行时构造任意一个类的对象作用3、在运行时判断

java如何解压zip压缩包

《java如何解压zip压缩包》:本文主要介绍java如何解压zip压缩包问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解压zip压缩包实例代码结果如下总结java解压zip压缩包坐在旁边的小伙伴问我怎么用 java 将服务器上的压缩文件解压出来,

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注