Java try catch finally语句

格桑2021-09-17 10:48

    在实际开发中,根据trycatch语句的执行过程,try语句块和catch语句块有可能不被完全执行,而有些处理代码则要求必须执行。例如,程序在try块里打开了一些物理资源(如数据库连接、网络连接和磁盘文件等),这些物理资源都必须显式回收。

    Java的垃圾回收机制不会回收任何物理资源,垃圾回收机制只回收堆内存中对象所占用的内存。

    所以为了确保一定能回收try块中打开的物理资源,异常处理机制提供了finally代码块,并且Java7之后提供了自动资源管理(AutomaticResourceManagement)技术。

    finally语句可以与前面介绍的trycatch语句块匹配使用,语法格式如下:

try {
    // 可能会发生异常的语句
} catch(ExceptionType e) {
    // 处理异常语句
} finally {
    // 清理代码块
}

    对于以上格式,无论是否发生异常(除特殊情况外),finally语句块中的代码都会被执行。此外,finally语句也可以和try语句匹配使用,其语法格式如下:

try {
    // 逻辑代码块
} finally {
    // 清理代码块
}

    使用try-catch-finally语句时需注意以下几点:

    1、异常处理语法结构中只有try块是必需的,也就是说,如果没有try块,则不能有后面的catch块和finally块;

    2、catch块和finally块都是可选的,但catch块和finally块至少出现其中之一,也可以同时出现;

    3、可以有多个catch块,捕获父类异常的catch块必须位于捕获子类异常的后面;

    4、不能只有try块,既没有catch块,也没有finally块;

    5、多个catch块必须位于try块之后,finally块必须位于所有的catch块之后。

    6、finally与try语句块匹配的语法格式,此种情况会导致异常丢失,所以不常见。

    一般情况下,无论是否有异常拋出,都会执行finally语句块中的语句,执行流程如图1所示。

Javatrycatchfinally语句

    trycatchfinally语句块的执行情况可以细分为以下3种情况:

    1、如果try代码块中没有拋出异常,则执行完try代码块之后直接执行finally代码块,然后执行trycatchfinally语句块之后的语句。

    2、如果try代码块中拋出异常,并被catch子句捕捉,那么在拋出异常的地方终止try代码块的执行,转而执行相匹配的catch代码块,之后执行finally代码块。如果finally代码块中没有拋出异常,则继续执行trycatchfinally语句块之后的语句;如果finally代码块中拋出异常,则把该异常传递给该方法的调用者。

    3、如果try代码块中拋出的异常没有被任何catch子句捕捉到,那么将直接执行finally代码块中的语句,并把该异常传递给该方法的调用者。

    除非在try块、catch块中调用了退出虚拟机的方法System.exit(intstatus),否则不管在try块或者catch块中执行怎样的代码,出现怎样的情况,异常处理的finally块总会执行。

    通常情况下不在finally代码块中使用return或throw等导致方法终止的语句,否则将会导致try和catch代码块中的return和throw语句失效。

    例1

    当Windows系统启动之后,即使不作任何操作,在关机时都会显示“谢谢使用”。下面编写Java程序使用trycatchfinally语句这个过程,具体代码如下:

import java.util.Scanner;
public class Test04 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Windows 系统已启动!");
        String[] pros = { "记事本", "计算器", "浏览器" };
        try {
            // 循环输出pros数组中的元素
            for (int i = 0; i < pros.length; i++) {
                System.out.println(i + 1 + ":" + pros[i]);
            }
            System.out.println("是否运行程序:");
            String answer = input.next();
            if (answer.equals("y")) {
                System.out.println("请输入程序编号:");
                int no = input.nextInt();
                System.out.println("正在运行程序[" + pros[no - 1] + "]");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            System.out.println("谢谢使用!");
        }
    }
}

    上述代码在main()方法中使用trycatchfinally语句模拟了系统的使用过程。当系统启动之后显示提示语,无论是否运行了程序,或者在运行程序时出现了意外,程序都将执行finally块中的语句,即显示“谢谢使用!”。输出时的结果如下所示。

Windows 系统已启动!
1:记事本
2:计算器
3:浏览器
是否运行程序:
y
请输入程序编号:
2
正在运行程序[计算器]
谢谢使用!
Windows 系统已启动!
1:记事本
2:计算器
3:浏览器
是否运行程序:
y
请输入程序编号:
5
谢谢使用!
java.lang.ArrayIndexOutOfBoundsException: 4
    at text.text.main(text.java:23)
Windows 系统已启动!
1:记事本
2:计算器
3:浏览器
是否运行程序:
asdfasd
谢谢使用!

    以上就是小编为大家准备的“Java try catch finally语句”一文,更多相关内容尽在开课吧广场Java教程频道。

Javatrycatchfinally语句

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享
全部评论快来秀出你的观点
登录 后可发表观点…
发表
暂无评论,快来抢沙发!
高并发编程训练营