BCSP-玄子JAVA开发之面向对象编程CH06_ 异常笔记

BCSP-玄子JAVA开发之面向对象编程CH06_ 异常笔记

6.1 什么是异常

是指在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序

6.1.2 程序中的异常处理

Java编程语言使用异常处理机制为程序提供了错误处理的能力

Java中,所有的异常都定义为类,除了内置的异常类之外,Java也可以自定义异常类,Java的异常处理机制也允许自行抛出异常

6.1.4 Java 中如何进行异常处理

Java的异常处理是通过5个关键字实现的

  • try:执行可能产生异常的代码
  • catch:捕获异常
  • finally:无论是否发生异常,代码总能执行
  • throw:手动抛出异常
  • throws:声明方法可能要,抛出的各种异常

6.1.5 常用的异常处理结构

try {
    //有可能出现异常的语句
}[catch(异常类型 异常对象) {
    //异常处理语句
}] [finally {
   //一定会运行到的语句
}]

catch 和 finally 可选,但不能同时省略

6.1.6 try-catch-finally

在 try-catch 块后加入 finally 块,不论是否发生异常都执行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o2M2BLZA-1676141428288)(./assets/image-20230212022102788.png)]

6.1.7 多重 catch 块

try {
    //有可能出现异常的语句
}[catch(异常类型1 异常对象) {
    //异常处理语句
}catch(异常类型2 异常对象) {
    //异常处理语句
}……]
[finally {
   //一定会运行到的语句
}]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rc8OyMpO-1676141428291)(./assets/image-20230212022638271.png)]

引发多种类型的异常

  • 排列catch 语句的顺序:先子类后父类

  • 发生异常时按顺序逐个匹配

  • 只执行第一个与异常类型匹配的catch语句

6.1.8 多重异常处理示例

从上到下的顺序检测每个catch语句。当匹配到某条catch语句后,后续其他catch语句块将不再执行

Exception为参数的catch语句必须放在最后的位置;否则,后面以其子类异常作为参数的catch语句将得不到被执行的机会


6.2 异常的分类

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ibcn8gs4-1676141428291)(./assets/image-20230212022813823.png)]

6.2.1 运行时异常

是可以在程序中避免的异常,当程序进行时发生异常,会输出异常堆栈信息并终止程序运行,可以使用try-catch语句捕获

6.2.2 常见的异常类型

异常类型说明
ArithmeticException当出现算术错误时,抛出此异常 如:一个整数“除以零”时,抛出此异常
ArrayIndexOutOfBoundsException非法索引访问数组时抛出的异常 如索引为负或大于等于数组长度
ClassCastException当试图将对象强制转换为非本对象类型的子类时,抛出该异常
IllegalArgumentException表明向方法传递了一个不合法或不正确的参数
InputMismatchException欲得到的数据类型与实际输入的类型不匹配
NullPointerException当应用程序试图在需要对象的地方使用null时,抛出该异常
NumberFormatException当试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常 如:把“ABC”转成数字

6.2.3 Checked异常

  • 是指运行时异常以外的异常

  • 是用户错误或问题引起的异常

  • 程序员无法预见

  • 编译器会提示

  • 如果不进行捕获,则会出现编译错误

  • 常见的异常类型

    • FileNotFoundException异常

    • SQLException异常

对异常类子类命名时会使用XXXError

或XXXException形式

6.2.4 异常处理的完整流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GMUVPDlZ-1676141428292)(./assets/image-20230212023313284.png)]

  • 对于异常处理,不同项目的要求并不相同

  • 由项目开发标准决定异常是统一使用Exception类型接收处理还是分开处理

  • 如果开发要求严格,会对每一种异常分别进行处理,详细记录异常信息,产生一定工作量


6.3 声明异常

使用关键字throws声明某个方法可能抛出的各种异常

public void 方法名()  throws 异常类型[,异常类型] {
   //方法体	  声明异常,多个异常用逗号隔开 
}

实际开发中,main()方法不建议声明异常,因为如果程序出现了错误,会导致程序中断执行


6.4 抛出异常

  • 除了系统自动抛出异常外,有些问题需要程序员自行抛出异常

  • 根据程序逻辑自定义的异常类,在Java异常体系中并未提供,不能抛出

  • 根据业务需要自行选择异常抛出时机,或自定义异常处理逻辑

throw new 异常名([参数列表]; 

throw抛出的只能是Throwable类或其子类的对象


6.5 自定义异常

当Java异常体系中提供的异常类型不能满足程序的需要时,可以自定义异常类

步骤

  1. 定义异常类,继承Exception类或者RuntimeException类

  2. 编写异常类的构造方法,并继承父类的实现

  3. 实例化自定义异常对象,并使用throw关键字抛出

6.5.1 自定义异常的应用场景

  • 项目中因业务逻辑错误需要抛出异常,但Java中不存在这类异常例如,年龄异常、性别异常等

  • 项目开发一般是由团队成员共同完成,为统一对外异常展示的方式,可以使用自定义异常


6.6 日志记录框架

使用日志框架以文件形式记录异常信息

日志(log)

  • 主要用来记录系统运行中一些重要操作信息

  • 便于监视系统运行情况,帮助用户提前发现和避开可能出现的问题,或者出现问题后根据日志找到原因

日志分类

  • SQL日志、异常日志、业务日志

日志的主要用途

  • 问题追踪

  • 状态监控

  • 安全审计

6.6.1 日志框架log4j2

一款非常优秀的日志框架

  • 控制日志的输出级别

  • 控制日志信息输送的目的地是控制台、文件等

  • 控制每一条日志的输出格式

6.6.2 使用log4j2记录日志

操作步骤

  1. 编写配置文件

    • 文件后缀可为.xml、.json或者.jsn
  2. 定义日志记录器Logger

    • 获取日志记录器的方式
  3. 记录日志

    • Logger类可以替代System.out或者System.err,供开发者记录日志信息

6.6.3 Logger类常用方法

方法描述
publicvoiddebug(Objectmsg)
publicvoiddebug(Objectmsg,Throwablet)
记录debug级别日志
publicvoidinfo(Objectmsg)
publicvoidinfo(Objectmsg,Throwablet)
记录info级别日志
publicvoidwarn(Objectmsg)
publicvoidwarn(Objectmsg,Throwablet)
记录warn级别日志
publicvoiderror(Objectmsg)
publicvoiderror(Objectmsg,Throwablet)
记录error级别日志
publicvoidfatal(Objectmsg)
publicvoidfatal(Objectmsg,Throwablet)
记录fatal级别日志

需要手工创建

一般用log4j2.xml命名

6.6.4 日志记录器的日志级别

  • all:最低等级,用于打开所有日志记录

  • trace:用于程序追踪输出

  • debug:指出细粒度信息事件,对高度应用程序是非常有帮助的

  • info:在粗粒度级别上指明消息,强调应用程序的运行过程

  • warn:表示警告信息,即可能会出现的潜在错误

  • error:指出虽然发生错误事件,但仍然不影响系统的继续运行

  • fatal:指出将会严重的错误事件将会导致应用程序退出

  • OFF:最高等级的,用于关闭所有日志记录

程序会输出高于或等于所设置级别的日志

设置的日志等级越高,输出的日志就越少

BCSP-玄子JAVA开发之面向对象编程CH06_ 异常笔记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值