Java try catch finally异常处理语句的用法(附带实例)
在程序设计和运行过程中,发生错误是不可避免的。为此,Java 提供了异常处理机制来帮助程序员检查可能出现的错误,保证程序的可读性和可维护性。
Java 语言的异常捕获结构由 try、catch 和 finally 这 3 部分组成。其中:
try、catch 和 finally 的语法格式如下:
程序中将可能出现异常的代码用 try catch 语句块进行处理,当 try 语句块中的语句发生异常时,程序就会跳转到 catch 语句块中执行,执行完 catch 语句块中的程序代码后,将继续执行 catch 语句块后的其他代码,而不会执行 try 语句块中发生异常语句后面的代码。由此可知,Java 的异常处理是结构化的,不会因为一个异常影响整个程序的执行。
注意,有时为了编程简单会忽略 catch 语句后的代码,这样 try catch 语句就成了一种摆设,一旦程序在运行过程中出现了异常,就会导致最终运行结果与期望的不一致,而错误发生的原因很难查找。因此要养成良好的编程习惯,最好在 catch 语句块中写入处理异常的代码。
举个简单的例子:
但是,在以下 4 种特殊情况下,finally 块不会被执行:
Java 中常见的异常类如下表所示。
Java 语言的异常捕获结构由 try、catch 和 finally 这 3 部分组成。其中:
- try 语句块存放的是可能发生异常的 Java 语句;
- catch 语句块在 try 语句块之后,用来激发被捕获的异常;
- finally 语句块是异常处理结构的最后执行部分,无论 try 语句块中的代码如何退出,都将执行 finally 语句块。
try、catch 和 finally 的语法格式如下:
try {
// 程序代码块
}
catch(Exceptiontype1 e) {
// 对 Exceptiontype1 的处理
}
catch(Exceptiontype2 e) {
// 对 Exceptiontype2 的处理
}
...
finally {
// 程序代码块
}
通过异常处理器的语法可知,异常处理器大致分为 try catch 语句块和 finally 语句块。Java try catch语句块
【实例】在项目中创建 Take 类,在主方法中使用 try catch 语句块将可能出现的异常语句进行异常处理。
public class Take { // 创建类
public static void main(String[] args) { // 主方法
try { // try 语句块中包含可能出现异常的程序代码
String str = "lili"; // 定义字符串变量
System.out.println(str + "年龄是:"); // 输出的信息
int age = Integer.parseInt("20L"); // 数据类型转换
System.out.println(age);
} catch (Exception e) { // catch 语句块用来获取异常信息
e.printStackTrace(); // 输出异常性质
}
System.out.println("program over"); // 输出信息
}
}
运行结果为:
lili年龄是:
java.lang.NumberFormatException: For input string: "20L"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
at java.base/java.lang.Integer.parseInt(Integer.java:658)
at java.base/java.lang.Integer.parseInt(Integer.java:776)
at Main.main(Main.java:6)
program over
程序中将可能出现异常的代码用 try catch 语句块进行处理,当 try 语句块中的语句发生异常时,程序就会跳转到 catch 语句块中执行,执行完 catch 语句块中的程序代码后,将继续执行 catch 语句块后的其他代码,而不会执行 try 语句块中发生异常语句后面的代码。由此可知,Java 的异常处理是结构化的,不会因为一个异常影响整个程序的执行。
注意,有时为了编程简单会忽略 catch 语句后的代码,这样 try catch 语句就成了一种摆设,一旦程序在运行过程中出现了异常,就会导致最终运行结果与期望的不一致,而错误发生的原因很难查找。因此要养成良好的编程习惯,最好在 catch 语句块中写入处理异常的代码。
Java finally语句块
完整的异常处理语句一定要包含 finally 语句,无论程序中有无异常发生,并且无论之前的 try catch 语句块是否被顺利执行完毕,都会执行 finally 语句。举个简单的例子:
public class FinallyExample {
public static void main(String[] args) {
try {
// 尝试打开一个不存在的文件
java.io.FileWriter writer = new java.io.FileWriter("nonexistent.txt");
writer.write("This will not be written.");
} catch (java.io.IOException e) {
// 捕获并处理异常
System.out.println("An error occurred.");
} finally {
// 无论是否发生异常,都会执行这里的代码
System.out.println("This is the finally block. It will always be executed.");
}
System.out.println("This line is always executed after the try-catch-finally block.");
}
}
在这个例子中:
- 尝试打开一个不存在的文件 nonexistent.txt 并写入数据。这将引发 IOException。
- 异常被捕获并处理,打印出 "An error occurred."。
- 无论是否发生异常,finally 语句块中的代码都会执行,打印出 "This is the finally block. It will always be executed."。
- 最后,程序继续执行,打印出 "This line is always executed after the try-catch-finally block."。
但是,在以下 4 种特殊情况下,finally 块不会被执行:
- 在 finally 语句块中发生了异常;
- 在前面的代码中使用了 System.exit() 退出程序;
- 程序所在的线程死亡;
- 关闭 CPU。
Java常见的异常类
在 Java 中,提供了一些异常类用来描述经常发生的异常。其中,有的需要程序员进行捕获处理或声明抛出,有的是由 Java 虚拟机自动进行捕获处理的。Java 中常见的异常类如下表所示。
| 异常类 | 说明 |
|---|---|
| ClassCastException | 类型转换异常 |
| ClassNotFoundException | 未找到相应类时抛出的异常 |
| ArithmeticException | 算术异常 |
| ArrayIndexOutOfBoundsException | 数组下标越界时抛出的异常 |
| ArrayStoreException | 数组中包含不兼容的值时抛出的异常 |
| SQLException | 操作数据库时抛出的异常 |
| NullPointerException | 空指针时抛出的异常 |
| NoSuchFieldException | 字段未找到时抛出的异常 |
| NoSuchMethodException | 方法未找到时抛出的异常 |
| NumberFormatException | 字符串被转换为数字时抛出的异常 |
| NegativeArraySizeException | 数组元素个数为负数时抛出的异常 |
| StringIndexOutOfBoundsException | 字符串索引超出范围时抛出的异常 |
| IOException | 输入输出异常 |
| IllegalAccessException | 不允许访问某类时抛出的异常 |
| InstantiationException | 当应用程序试图使用 Class 类中的 newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常 |
| EOFException | 文件已结束时抛出的异常 |
| FileNotFoundException | 文件未找到时抛出的异常 |
ICP备案:
公安联网备案: