在 Java 基础语法中,当程序执行过程中发生错误或异常时,会抛出异常,异常即指程序在运行过程中遇到的错误或意外情况。Java 中的异常是用于处理程序意外情况的一种机制。
Java 认识异常并掌握使用
什么是异常?
在 Java 基础语法中,当程序执行过程中发生错误或异常时,会抛出异常,异常即指程序在运行过程中遇到的错误或意外情况。Java 中的异常是用于处理程序意外情况的一种机制。
异常的分类
Java 中的异常一般分为两类:可检查异常(checked exception)和不可检查异常(unchecked exception)。
- 可检查异常:这种类型的异常在编码时必须使用 try-catch 块或者 throws 关键字进行处理,不处理编译时会报错。
- 不可检查异常:这种类型的异常在编码时可以不处理,如果不处理,在运行时会抛出异常。
异常处理的方法
异常的处理可以使用 try-catch-finally 块进行处理,也可以使用 throws 关键字将异常抛给调用者。
try-catch-finally 块
try {
// 可能会抛出异常的代码块
} catch (Exception e) {
// 处理异常的代码块
} finally {
// 最后一定执行的代码块
}
在 try 块中写可能会抛出异常的相关代码,在 catch 块中处理异常,如果有多个 catch 块,从上到下按顺序匹配异常类型进行处理。
finally 块中的代码一定会执行,无论 try 和 catch 块中是否有异常抛出,都会执行 finally 块中的代码。finally 块一般用于释放资源等操作。
throws 关键字
当一个方法将异常抛给调用者时,需要在方法中使用 throws 关键字,如下所示:
public void test() throws Exception {
// 可能会抛出异常的代码块
}
调用该方法时,调用者需要处理或者继续抛出该异常。
示例说明
可检查异常的处理
在下面的示例代码中,我们可以看到,当调用 FileInputStream
的构造方法时,需要抛出 FileNotFoundException
异常。由于该异常为可检查异常,所以在编码时需要使用 try-catch-finally 块进行处理。
示例代码如下:
public class Demo {
public static void main(String[] args) {
FileInputStream fis = null;
try {
fis = new FileInputStream("D:\\test.txt");
// TODO 业务处理
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
在上述示例代码中,我们通过使用 try-catch-finally 块捕获了 FileNotFoundException
异常,并在 finally 块中释放了文件流资源。
不可检查异常的处理
在下面的示例代码中,我们可以看到,当数组下标越界时,会抛出 ArrayIndexOutOfBoundsException
异常,该异常为不可检查异常,所以不需要在编码时进行处理。
示例代码如下:
public class Demo {
public static void main(String[] args) {
String[] arr = new String[3];
System.out.println(arr[3]);
}
}
在上述示例代码中,当使用 System.out.println(arr[3])
时,会抛出 ArrayIndexOutOfBoundsException
异常,我们可以在控制台看到完整的异常信息。
总结
Java 中的异常是处理程序意外情况的重要机制,可检查异常必须在编码时进行处理,而不可检查异常则可以忽略。在异常处理时,我们可以使用 try-catch-finally 块进行处理,也可以使用 throws 关键字将异常抛给调用者。最后,需要注意资源的释放,在 finally 块中释放资源是一种较好的方式。
本文标题为:Java 认识异常并掌握使用


- MyBatis实现配置加载的步骤 2023-07-15
- Java为实体类动态添加属性的方法详解 2022-11-29
- java分布式事务之可靠消息最终一致性解决方案 2023-03-22
- Mybatis-plus selectByMap条件查询方式 2023-02-04
- jsp输出金字塔的简单实例 2023-08-03
- Java C++题解leetcode1441用栈操作构建数组示例 2023-06-17
- JavaScript封装axios的实现详解 2024-01-28
- Java使用sleep方法暂停线程Thread 2023-08-07
- JavaScript处理解析JSON数据过程详解 2024-02-02
- springmvc学习笔记-返回json的日期格式问题的解决方法 2024-02-02