Java try catch finally语句

在实际开发中,根据 try catch 语句的执行过程,try 语句块和 catch 语句块有可能不被完全执行,而有些处理代码则要求必须执行,例如文件的关闭、释放资源等,此时就可以将这些代码放在 finally 语句块中。

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

 
  1. try
  2. {
  3. 逻辑代码块
  4. }
  5. catch(ExceptionType e)
  6. {
  7. 异常处理代码块
  8. }
  9. finally
  10. {
  11. 清理代码块
  12. }


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

 
  1. try
  2. {
  3. 逻辑代码块
  4. }
  5. finally
  6. {
  7. 清理代码块
  8. }


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

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


图1 try catch finally 语句执行流程图


try catch finally 语句块的执行情况可以细分为以下 5 种情况:

  1. 如果 try 代码块中没有拋出异常,则执行完 try 代码块之后直接执行 finally 代码块,然后执行 try catch finally 语句块之后的语句。
  2. 如果 try 代码块中拋出异常,并被 catch 子句捕捉,那么在拋出异常的地方终止 try 代码块的执行,转而执行相匹配的 catch 代码块,之后执行 finally 代码块。如果 finally 代码块中没有拋出异常,则继续执行 try catch finally 语句块之后的语句;如果 finally 代码块中拋出异常,则把该异常传递给该方法的调用者。
  3. 如果 try 代码块中拋出的异常没有被任何 catch 子句捕捉到,那么将直接执行 finally 代码块中的语句,并把该异常传递给该方法的调用者。
  4. 在前面的代码中用 System.exit() 退出运行。如果代码在 try 内部执行一条 System.exit() 语句,则应用程序将终止而不会执行 finally。
  5. 如果在执行 finally 块之前,程序所在的线程死亡,finally 块将不被执行。


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

 
  1. public class Test04
  2. {
  3. public static void main(String[] args)
  4. {
  5. Scanner input=new Scanner(System.in);
  6. System.out.println("Windows 系统已启动!");
  7. String[] pros={"记事本","计算器","浏览器"};
  8. try
  9. {
  10. //循环输出pros数组中的元素
  11. for(int i=0;i<pros.length;i++)
  12. {
  13. System.out.println(i+1+":"+pros[i]);
  14. }
  15. System.out.println("是否运行程序:");
  16. String answer=input.next();
  17. if(answer.equals("y"))
  18. {
  19. System.out.println("请输入程序编号:");
  20. int no=input.nextInt();
  21. System.out.println("正在运行程序["+pros[no-1]+"]");
  22. }
  23. }
  24. catch(Exception e)
  25. {
  26. e.printStackTrace();
  27. }
  28. finally
  29. {
  30. System.out.println("谢谢使用!");
  31. }
  32. }
  33. }


上述代码在 main() 方法中使用 try catch finally 语句模拟了系统的使用过程。当系统启动之后显示提示语,无论是否运行了程序,或者在运行程序时出现了意外,程序都将执行 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 try { // 可能会抛出异常的代码 } catch (ExceptionType1 e1) { // 处理异常型1的代码 } catch (ExceptionType2 e2) { // 处理异常型2的代码 } finally { // 无论是否发生异常,都会执行的代码 } ``` 在 try ,你可以放置可能会抛出异常的代码。如果在执行 try 的代码时发生了异常,那么就会跳到相应的 catch 进行异常处理。catch 可以有多个,每个 catch 用于捕获不同型的异常,并提供相应的处理逻辑。catch 的参数 e1、e2 是异常对象,你可以使用它们来获取有关异常的信息。 无论是否发生异常,finally 的代码都会被执行。finally 通常用于释放资源或执行清理操作,确保在任何情况下都会执行。 如果在 try 发生了异常,并且没有相应的 catch 来处理该异常,那么该异常将被传递给上层调用栈,直到找到合适的 catch 进行处理,或者如果没有找到任何 catch ,则程序将终止。 以下是一个简单的示例: ```java try { int result = divide(10, 0); System.out.println("结果:" + result); } catch (ArithmeticException e) { System.out.println("除数不能为零!"); } finally { System.out.println("finally 的代码"); } public static int divide(int dividend, int divisor) { return dividend / divisor; } ``` 在上面的示例,divide 方法会抛出一个 ArithmeticException 异常,因为除数为零。在 catch ,我们对该异常进行处理,并输出相应的信息。无论是否发生异常,finally 的代码都会执行,输出 "finally 的代码"。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值