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

相关文章

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Java注解之超越Javadoc的元数据利器详解

《Java注解之超越Javadoc的元数据利器详解》本文将深入探讨Java注解的定义、类型、内置注解、自定义注解、保留策略、实际应用场景及最佳实践,无论是初学者还是资深开发者,都能通过本文了解如何利用... 目录什么是注解?注解的类型内置注编程解自定义注解注解的保留策略实际用例最佳实践总结在 Java 编程

Java 实用工具类Spring 的 AnnotationUtils详解

《Java实用工具类Spring的AnnotationUtils详解》Spring框架提供了一个强大的注解工具类org.springframework.core.annotation.Annot... 目录前言一、AnnotationUtils 的常用方法二、常见应用场景三、与 JDK 原生注解 API 的

Java controller接口出入参时间序列化转换操作方法(两种)

《Javacontroller接口出入参时间序列化转换操作方法(两种)》:本文主要介绍Javacontroller接口出入参时间序列化转换操作方法,本文给大家列举两种简单方法,感兴趣的朋友一起看... 目录方式一、使用注解方式二、统一配置场景:在controller编写的接口,在前后端交互过程中一般都会涉及

Java中的StringBuilder之如何高效构建字符串

《Java中的StringBuilder之如何高效构建字符串》本文将深入浅出地介绍StringBuilder的使用方法、性能优势以及相关字符串处理技术,结合代码示例帮助读者更好地理解和应用,希望对大家... 目录关键点什么是 StringBuilder?为什么需要 StringBuilder?如何使用 St

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Maven中引入 springboot 相关依赖的方式(最新推荐)

《Maven中引入springboot相关依赖的方式(最新推荐)》:本文主要介绍Maven中引入springboot相关依赖的方式(最新推荐),本文给大家介绍的非常详细,对大家的学习或工作具有... 目录Maven中引入 springboot 相关依赖的方式1. 不使用版本管理(不推荐)2、使用版本管理(推

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

在 Spring Boot 中实现异常处理最佳实践

《在SpringBoot中实现异常处理最佳实践》本文介绍如何在SpringBoot中实现异常处理,涵盖核心概念、实现方法、与先前查询的集成、性能分析、常见问题和最佳实践,感兴趣的朋友一起看看吧... 目录一、Spring Boot 异常处理的背景与核心概念1.1 为什么需要异常处理?1.2 Spring B