hooyantsing's Blog

第七章_异常、断言和日志

字数统计: 700阅读时长: 2 min
2020/06/04

第七章 异常、断言和日志

7.1.1 异常分类

6d3a9d9cf168c088b7b98a663b334fe8.png

3b9676c2245b64eb1626525de7738de3.png

术语:非受查异常和受查异常

  • 非受查异常:派生于Error或RuntimeException
  • 受查异常:其他所有的异常称为受查异常

一个方法必须声明所有可能抛出的受查异常,非受查异常要么不可控制(Error),要么就应该避免(RuntimeException)。当方法没有声明所有可能发生的受查异常,编译器会发出一个错误消息。

7a524c52ff1e196c60146c1f84c77b95.png

b9424e6ce8f73e6f0920ad2f19729736.png

RuntimeException属于程序本身的问题,应避免出现。

9ef3daae022a7196aa51162d7e655425.png

7a2e448d067c2205df62978a2d95fd3d.png

Throwable 常用API

ccd9513fe810b3c2fcec5ae641007639.png

7.2.2 捕获多个异常

a3aeb9b3f477ef1ff3d3af79e812ebf9.png

7.2.3 再次抛出异常与异常链

9762de8dcde7db00a9851d35ee095783.png

7.2.5 带资源的try语句

为什么要使用带资源的try语句?

finally代码块内的语句有可能也会抛出异常,会将try代码块内的异常覆盖掉,丢失原始异常信息。

062f3c4f750fed83e1c6b379fbf3c717.png

1a7935e155cee968eecfc7de3ff3b3ac.png

注意:

实例对象必须实现AutoCloseable或其子接口才可以放在try后面。

例如FileInputStream类,实现了接口。

89f573e853d759801bd29e3dccc1f513.png

AutoCloseable和Closeable的关系?

AutoCloseable是Closeable的父类。

可以说,Closeable接口是IO包的专属接口。

2267945bab556d6997547319cd4557a9.png

daf6ad0577350b17a181c4973b768c0a.png

7.2.6 分析堆栈轨迹元素

848ed3730aad072d21bb91987c796a97.png

静态的Thread.getAllStackTrace方法,根据Thread线程对象返回StackTraceElement对象数组(每一个都是一条堆栈轨迹记录)

28df84efd6e1f0789c160e867348e216.png

异常常用API

0c00b56c808a3202e7241df450fb9c64.png

void printStackTrace()

用于打印全部的堆栈记录。

ce9bca00749692a93d9b8b916136c4ae.png

8f709599196862e318db697c1cda865a.png

7c09c300e6702539959af54a8b545eab.png

7.4.1 断言概念

关键字:assert

JDK自带的断言

e5b1fb8de1e0d34af031ae4d28600ebc.png

a43f0c32e89400e36fc4bbe8b9e1d5f7.png

7.4.2 启用和禁用断言

2bb1ebd99650be0f2efa41e289b28105.png

类加载器 API

启用和禁用断言,和类加载器类有关

b329cb79a7f28fc4478ab8fb36107da2.png

7.5.1 基本日志

JDK自带的logger日志

18099650f4d2c7ffdc9c86916d693e9c.png

log4j日志优先级

工作中常用log4j作为日志组件

fd0ddbf2131302e7a63145d752e3b443.png

logger日志

注意:由于书和资料的称呼不同,处理器控制器是****同一个东西

优先级

默认级别:INFO

af5c0b259ff448bbb719297f3be4420c.png

54d60cdafacff6f30176a66c79646d43.png

定义日志记录器名时,推荐使用包命名格式。如下:

b22a292efbf1c98527e382d9428593ac.png

如何将日志输出到控制台或者文件中?

默认输出至控制台,一般不用使用ConsoleHandler类。

7114852bb22203a6fd7dd88f27e99c1f.png

默认输出的文件格式为XML

9f73021fa3e5b9d881da5768756afe82.png

如何对日志格式化?

对控制器(***Handler)类的setFormatter方法内实现Formatter抽象类。

7d01850ade8039cb2717d864c27373cd.png

扩展:Formatter抽象类。

java.util.logging.Formatter

0a2b8f4bce12943d8392f493c5885185.png

实现的是format抽象方法

2a91c393caef1f5b91e6e4cc00d17940.png

java.util.logging.Logger使用详解 - 山高我为峰 - 博客园

7.5.3 修改日志管理器配置

7849932218ca14b2cb1236fc034075b8.png

516260a2786f63f2874b25fe01c87971.png

7.5.5 处理器

也就是上面所说的控制器,是同一个东西。

dd29d2cbeb1a2cf584c226ddd4423be7.png

处理器类

ConsoleHandler:将日志输出至控制台

FileHandler:将日志输出至指定文件 -> 默认输出XML格式,通过格式化可以改成其他格式

SocketHandler:将日志输出至指定主机和端口

684693d3d32893ccdfed0fa1eee87fd7.png

7.5.6 过滤器

a73c4d660f4af279fdedd797a8c11600.png

7.5.7 格式化器

02800cdad4d9219997f641ab7946a5ad.png

有关JDK自带日志Logger类的常用API

34d3e0e52b5f13f4e0855c0975b81d10.png

1c1ac50cf8121dd20f4f4352a886be5a.png

3990fb819f52dde9ca52afd2e168370b.png

f5921a64f9cfb55434c87a12b740dfa2.png

4ec2ef16757c4679b6d9406f3d368922.png

689da755c9aa4b4a7ba4d40eb5513899.png

b6a9301a08f4d55b4f9dd9e8668de077.png

3e9ae00601f02e7cc20bd8aad0da6312.png

741af385b73a9bedcb0a8788a2c28e9e.png

CATALOG