Java try catch用法详解(附带实例)
在 Java 程序中,对可能抛出异常的代码块可以使用 try-with-resource 方式进行处理,涉及的关键字为 try、catch、finally,语法块分为 try-catch 与 try-catch-finally。
【实例】读取文件以获取一个文件输入流,在传入文件路径时,可能参数为空;即使文件路径不为空,也不能排除这个文件路径是无效的。因此,代码应该考虑这些问题并捕获这些问题,代码如下:
若知道代码可能抛出异常,但不清楚是什么具体异常,或不希望过细处理异常,或异常情况较多,则可以统一捕获 Exception 异常,即只要代码有异常,就对其进行捕获。
语法结构如下:
【实例 2】在实例 1中,在使用完毕对象之后,我们期望将流关闭,并且不管代码是否出错,关闭流这个操作必须执行,否则它将一直占用内存资源。此时,应该把这些必要操作放在 finally 代码块中,代码如下:
需要注意的是,如果 try 代码块抛出异常,那么该异常会被 finally 中的异常覆盖。
语法结构如下:
【实例 3】例 1 使用 try-catch 捕获异常,现在使用 throws 抛出异常,代码如下:
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 声明。