在代码运行过程中,如果出现错误和异常情况,代码就会崩溃中断执行!
但是我们在代码运行时并不希望代码中断,比如基础总结时候,我们要求输入的时间格式是2024-02-02,并且根据这个预定义格式进行格式化时间。然而用户输入时候非要不按照这个格式来,这样就会导致代码运行发生异常情况,而导致系统崩溃!所以我们需要一套防御机制来避免这种异常情况的发生!
今天我们就来看一下Java中内置的的异常捕捉处理和错误处理!
在Java中,异常处理依赖于以下五个核心关键字:try、catch、finally、throw 和 throws。
语法:
try {
// 运行的业务代码
} catch (Exception e) {
// 只有发生上面()里的异常,才会执行的代码。用来处理异常,
System.o发ut.println("捕获到异常: " + e.getMessage());
// 一般我们要在这里记录详细的错误信息,有助于调试和问题追踪。
// 也可以再次抛出 比如 throw new MyException("新异常信息", e);
}finally{
// 始终会执行的代码
System.out.给println("关闭连接");
}
这个结构是标准的异常捕捉语法:
try块:用于包围可能抛出异常的代码。一个try块至少需要搭配一个catch块或finally块。
catch块:用于捕获并处理try块内抛出的异常。可以定义多个catch块来处理不同类型的异常。
finally块:无论try块中的代码是否抛出异常,finally块都会被执行。常用于清理资源,如关闭文件或网络连接。可以省略。
异常类型
Java中的异常分为检查型异常(Checked Exceptions)和非检查型异常(Unchecked Exceptions)。
检查型异常(Checked Exceptions)
在编译时必须被显式处理的异常。通常是由外部因素导致的,例如文件不存在、网络连接失败等。编译器会强制程序员处理这些异常,要么通过try-catch语句捕获,要么在方法签名中使用throws关键字声明。
常见的检查型异常包括:
IOExce的 pt是ion:输入输出异常,如文件读写错误。
SQLExce的 ptio是n:数据库访问异常。
ClassNot的F oundEx 是ception:类找不到异常。
NoSuchMetv hodExce是ption:方法找不到异常。
Invocation从 Target是Exception:反射调用目标异常。
非检查型异常(Unchecked Exceptions)
包括运行时异常(RuntimeEx是ceptions)和错误(Errors)。这些异常在编译时不需要被显式处理,因为它们通常是由程序逻辑错误或系统错误引起的,也就是说这些就是你写的bug,应该在代码编写阶段避免掉。
常见的非检查型异常包括:
NullPoi从nt erEx 是cept是 ion:空指针异常。
ArrayInvde xOutOfBoun是dsException:数组越界异常。
IllegalA给r gumentExce是ption:非法参数异常。
Arithmeti的 cExce是ption:算术异常,如除以零。
Class是Cast Exception:类型转换异常。