首页 > 编程笔记 > Java笔记 阅读:17

Java try catch finally异常处理语句的用法(附带实例)

在程序设计和运行过程中,发生错误是不可避免的。为此,Java 提供了异常处理机制来帮助程序员检查可能出现的错误,保证程序的可读性和可维护性。

Java 语言的异常捕获结构由 try、catch 和 finally 这 3 部分组成。其中:
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.");
    }
}
在这个例子中:
但是,在以下 4 种特殊情况下,finally 块不会被执行:
  1. 在 finally 语句块中发生了异常;
  2. 在前面的代码中使用了 System.exit() 退出程序;
  3. 程序所在的线程死亡;
  4. 关闭 CPU。

Java常见的异常类

在 Java 中,提供了一些异常类用来描述经常发生的异常。其中,有的需要程序员进行捕获处理或声明抛出,有的是由 Java 虚拟机自动进行捕获处理的。

Java 中常见的异常类如下表所示。

表:常见的异常类
异常类 说明
ClassCastException 类型转换异常
ClassNotFoundException 未找到相应类时抛出的异常
ArithmeticException 算术异常
ArrayIndexOutOfBoundsException 数组下标越界时抛出的异常
ArrayStoreException 数组中包含不兼容的值时抛出的异常
SQLException 操作数据库时抛出的异常
NullPointerException 空指针时抛出的异常
NoSuchFieldException 字段未找到时抛出的异常
NoSuchMethodException 方法未找到时抛出的异常
NumberFormatException 字符串被转换为数字时抛出的异常
NegativeArraySizeException 数组元素个数为负数时抛出的异常
StringIndexOutOfBoundsException 字符串索引超出范围时抛出的异常
IOException 输入输出异常
IllegalAccessException 不允许访问某类时抛出的异常
InstantiationException 当应用程序试图使用 Class 类中的 newInstance()方法创建一个类的实例,而指定的类对象无法被实例化时,抛出该异常
EOFException 文件已结束时抛出的异常
FileNotFoundException 文件未找到时抛出的异常

相关文章