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

Java try catch用法详解(附带实例)

在 Java 程序中,对可能抛出异常的代码块可以使用 try-with-resource 方式进行处理,涉及的关键字为 try、catch、finally,语法块分为 try-catch 与 try-catch-finally。

Java try-catch捕获异常

语法结构如下:
try{
    将可能发生异常的代码放入 try 代码块中
}catch(异常类型){
    处理异常的手段,如:记录日志/打印异常信息/继续抛出异常
}catch(异常类型){
    处理异常的手段,如:记录日志/打印异常信息/继续抛出异常
}...

【实例】读取文件以获取一个文件输入流,在传入文件路径时,可能参数为空;即使文件路径不为空,也不能排除这个文件路径是无效的。因此,代码应该考虑这些问题并捕获这些问题,代码如下:
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public static void readFile(String filePath){
    try {
        FileInputStream fis = new FileInputStream(filePath);
    }catch(NullPointerException e){
        System.out.println("文件名不能为空");
    }catch(FileNotFoundException e){
        System.out.println("文件路径异常");
    }
}
在上述代码中,try-catch 这种异常处理方式,要求多个 catch 中的异常不能相同,并且若 catch 中的多个异常之间有子类与父类异常关系,那么子类异常要在上面的 catch 处理,父类异常要在下面的 catch 处理,否则会出现编译错误。

若知道代码可能抛出异常,但不清楚是什么具体异常,或不希望过细处理异常,或异常情况较多,则可以统一捕获 Exception 异常,即只要代码有异常,就对其进行捕获。
public static void readFile2(String filePath){
    try {
        FileInputStream fis = new FileInputStream(filePath);
    }catch (Exception e){
        System.out.println("程序错误");
    }
}
在上述代码中,多个异常一次捕获,批量处理。

Java try-catch-finally

不论异常是否出现或被捕获,都希望执行某些操作,这些代码应该放在 finally 代码块中。

语法结构如下:
try{
    //do something
}catch(ExceptionClass e){
    //handle
}finally{
    //handle
}

【实例 2】在实例 1中,在使用完毕对象之后,我们期望将流关闭,并且不管代码是否出错,关闭流这个操作必须执行,否则它将一直占用内存资源。此时,应该把这些必要操作放在 finally 代码块中,代码如下:
public static void readFile3(String filePath){
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(filePath);
    }catch (Exception e){
        System.out.println("程序错误");
    }finally {
        try {
            if(fis != null) {
                fis.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
在上述代码中,你应该避免在 finally 子句中抛出异常,如果不能避免,就在 finally 子句中再次使用 try-catch。

需要注意的是,如果 try 代码块抛出异常,那么该异常会被 finally 中的异常覆盖。

Java异常抛出

在方法声明处使用关键字 throws,表明该方法可能抛出的异常。这样一来,调用该方法的代码,就需要处理这些异常。

语法结构如下:
public void method() throws 异常类型1, 异常类型2 {
    //方法体
}

【实例 3】例 1 使用 try-catch 捕获异常,现在使用 throws 抛出异常,代码如下:
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class ThrowableDemo01 {
    public static void readFile(String filePath) throws NullPointerException, FileNotFoundException {
        FileInputStream fis = new FileInputStream(filePath);
    }
}
在上述代码中,当异常无法处理或不希望自身直接处理,而是希望将其交由方法调用者处理时,就需要在方法上使用 throws 声明。

相关文章