Java中的try catch finally结构

目录

前言

try

catch

finally

代码结构示例

示例一

示例二 

后言


前言

在Java中,当我们进行异常处理时,常常要使用try catch finally结构,今天,我们就稍稍了解一下其中各部分的作用。

try

  • try 块标志着一个可能会抛出异常的代码块
  • 在 try 块中的代码抛出异常时,控制流会跳转到与之匹配的 catch 块(如果有匹配的话),而不会中断程序的执行
  • 如果 try 块中的代码执行完毕而没有抛出异常,则 catch 块将被跳过,直接执行后续的代码。

catch

  • catch 块用于捕获 try 块中抛出的异常,并对其进行处理。
  • 一个 try 块可以有多个 catch 块,每个 catch 块用于捕获特定类型的异常,按照它们在代码中的顺序进行匹配。
  • 如果一个异常被抛出,控制流会进入第一个匹配的 catch 块,并执行其中的代码。
  • catch 块中的代码会处理异常,比如记录错误日志、提供错误信息、或者进行异常恢复操作。

finally

  • finally 块用于指定一个代码块,该代码块中的代码在 try 块执行结束后无论是否抛出异常都会执行
  • 即使在 try 块中的代码执行过程中抛出了异常,finally 块中的代码也会被执行。
  • finally 块通常用于释放资源,比如关闭文件、释放内存、或者清理其他资源。
  • finally 块是可选的,可以省略不用。

代码结构示例

示例一

public class Main {
    public static void main(String[] args) {
        try {
            // 可能会抛出异常的代码块
            int a = 10, b = 0;
            int result = a / b; // 这里会抛出除以零的异常
            System.out.println("Result: " + result);
        } catch (ArithmeticException e) {
            // 捕获除以零异常并处理
            System.err.println("Caught an ArithmeticException: " + e.getMessage());
        } finally {
            // 无论是否抛出异常,finally 块中的代码都会执行
            System.out.println("Finally block executed");
        }
    }
}

在这段代码中,try 块中的除法操作会抛出一个除以零的算数异常(ArithmeticException)。由于没有处理除以零的情况,程序会进入 catch 块,并输出相应的错误信息。最后,无论是否抛出异常,finally 块中的代码都会被执行,用于释放资源或执行其他清理操作。

示例二 

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        BufferedReader reader = null;
        try {
            // 尝试打开一个文件并读取其中的内容
            reader = new BufferedReader(new FileReader("example.txt"));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            // 捕获并处理文件读取过程中可能出现的异常
            System.err.println("Error reading file: " + e.getMessage());
        } finally {
            // 无论是否抛出异常,都需要关闭文件
            try {
                if (reader != null) {
                    reader.close();
                }
            } catch (IOException e) {
                System.err.println("Error closing file: " + e.getMessage());
            }
        }
    }
}

在这段代码中,try 块尝试打开一个文件并读取其中的内容。如果文件读取过程中出现了异常(比如文件不存在或者无法访问),则会捕获并处理 IOException 异常。无论是否出现异常,finally 块中的代码都会执行,并且负责关闭文件。这样可以确保资源得到正确地释放,避免资源泄漏。

后言

try catch finally结构为我们提供了手动进行异常处理的方式,在try代码块抛出异常时,我们用catch代码块中的代码进行处理,而不是直接中断程序,最后,使用finally中的代码块做一些“收尾工作”

新手上路,水平有限,如有错误,还望海涵并指出!

与君共勉!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eternal*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值