type
status
date
slug
summary
tags
category
icon
password
异常
异常介绍
概述 代码出现了不正常现象在java中异常都是一个类


异常出现过程

创建异常对象(了解)
创建异常对象,只是为了后面学习如何处理异常其他暂时没有任何意义

异常处理方法(重点)
异常处理方式-throws
格式 在方法参数和方法体之间位置上写 throw 异常意义 处理异常将异常往上抛


异常处理方式-throws多个异常
格式 throws 异常1,异常2如果throws 的多个异常之间有子父类继承关系,我们可以直接throws 父类异常如果不知道多个异常之间是否有子父类继承关系,我们可以直接throws Exception
异常处理方式-try...catch
格式try{ 可能出现异常代码 } catch(异常 对象名){ 处理异常代码 -> 将来开发中将异常信息保存到日志文件中 }
异常处理方式-多个catch
格式try{ 可能出现异常代码 } catch(异常 对象名){ 处理异常代码 -> 将来开发中将异常信息保存到日志文件中 }catch(异常 对象名){ 处理异常代码 -> 将来开发中将异常信息保存到日志文件中 } catch(异常 对象名){ 处理异常代码 -> 将来开发中将异常信息保存到日志文件中 }... 注意如果catch 有多个异常之间有子父继承关系,我们可以直接catch父类异常如果不知道多个异常之间是否有子父类继承关系,我们可以直接catch Exception
finally处理
finally使用
概述代表的不管是否触发了异常,都会执行代码块特殊情况 如果之前执行了System.exit(0) 终止当前正在执行java虚拟机使用都是配合try-catch使用try{ 可能出现异常代码 } catch(异常 对象名){ 处理异常代码 -> 将来开发中将异常信息保存到日志文件中 } finally { 不管是否有异常都会执行代码 }
finally使用场景
关闭资源 原因 对象没有使用,GC(垃圾回收器)回收,用来回收堆内存中的垃圾,释放内存但是有些对象GC回收不了,比如:连接对象(Connection),IO流对象,Socket对象,这些对象GC回收不了,就需要我们手动回收,手动关闭将来不能回收对象new完之后,后续操作不管是否操作成功,是否有异常,我们都需要手动关闭,此时我们就可以关闭资源代码放到finally中

抛异常时注意的事项
如果父类中方法抛了异常,那么子类重写之后是否要抛呢? 可抛可不抛如果父类中没有抛异常,那么子类重写之后是否要抛异常? 不要抛
try-catch和throws使用时机
如果出来异常之后,还想后续的代码正常执行,我们需要用try-catch如果方法之间是递进关系(调用),我们可以先throws,但是到了最后需要用try...catch做一个统一的异常处理

:warning:
- 编译时期异常时必须要处理,不处理会爆红,没法往下写
- throws
- try-catch
- 运行时期异常我们一般不处理,一旦运行时期异常,肯定是代码写的有问题,我们直接修改代码细节即可
自定义异常和打印异常信息
自定义异常
需求 键盘输入一个用户名,实现登录功能,如果登录失败,抛出LoginUserException使用 定义一个类如果继承Exception就是编译时期异常如果继承RuntimeException就是运行时期异常
打印异常信息三个方法
Throwable类中方法 String toString() 输出异常类型和设置异常信息String getMessage() 输出设置异常信息void printStackTrace() 打印异常信息是最全的:包括异常类型,信息,以及出现的行数等
- 作者:NotionNext
- 链接:https://tangly1024.com/article/1c4db897-8f81-8063-8f46-f187daa5090a
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。






