先看一个没有异常的情况
package com.zhao.test;
public class TryTest {
static public int getValue()
{
int j=9;
try
{
System.out.println("try begin");
//j=10/0;
System.out.println("try before retrun");
return 1;
//unreachable code
//System.out.println("try after return");
}
catch(Exception e)
{
System.out.println(e);
//return 2;
}
finally
{
System.out.println("finally");
//return 20;
}
//如果finally中有return的话以下就是unreachable code
j=100;
System.out.println("out of try");
return j;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int k = getValue();
System.out.println(k);
}
}
try begin
try before retrun
finally
1
把j=10/0;前的//去掉,制造异常
try begin
java.lang.ArithmeticException: / by zero
finally
out of try
100
可见在j=10/0;中就出现异常就到catch块,try中的return就不能执行,直到执行try-catch-finally外的retrun.
去掉catch中和fianlly中的retrun前面的//,并注释掉try-catch-finally外的一段代码.
try begin
java.lang.ArithmeticException: / by zero
finally
20
在finally时就retrun了,无在catch中retrun;
总结:
1.执行retrun的话就会跳出函数返回了.
2.try-catch-finally的顺序是
没有异常的话,try一直执行至try中retrun前,就会去执行finally中的代码,如果finally中无retrun就会做try中的retrun,try中也没有retrun的话就会做try-catch-finally外的代码了.
如果在try中有异常的话,在异常处就会抛出,try中的就不再执行,去执行catch中的代码(前题是抛出的是catch中的异常,能被catch),catch中如果碰到retrun或到尽头,就会去执行finally中的代码,finally中的代码如有retrun就retrun,无就去catch中的retrun,如果catch都无retrun,就会执行try-catch-finally外的代码.
3.可见finally中的代码是一定会全执行的(retrun前)
4.retrun后的代码是无效的.
分享到:
相关推荐
标题 "try-catch-finally-return-in-finally.rar_return" 提到了 `try-catch-finally` 结构与 `return` 语句的交互,这涉及到程序执行流程的关键方面。 `try` 块是用来包含可能会抛出异常的代码。如果在 `try` 块中...
总之,"trycatch.zip"中的示例展示了如何在Golang中模仿`try...catch`和`try...catch...finally`结构,通过自定义的函数和闭包实现了异常处理功能,这对于编写需要优雅处理错误的Golang代码来说非常有用。
第二:finally里面不建议放return语句,根据需要,return语句可以放在try和catch里面和函数的后。可行的做法有四: 1、return语句只在函数后出现一次。 2、return语句仅在try和catch里面都出现。 3、...
在这个过程中,函数会将`try`或`catch`块中的`return`语句返回的值暂存起来,然后执行`finally`块。 如果在`finally`块中也有`return`语句,那么这个`return`值会覆盖之前暂存的值。也就是说,最终返回给调用者的值...
2. **资源管理**:Try…Catch 结合 Finally 语句块常用于确保资源(如数据库连接、文件流等)在任何情况下都能被正确关闭。例如,在示例中,即使在打开数据库连接时出现异常,Finally 块也会确保在程序退出前关闭...
`finally`通常与`try-catch`块一起使用,构成一个完整的异常处理结构。下面将详细探讨`finally`的用法、作用以及相关的编程实践。 1. `try-catch-finally`结构: 在Java中,异常处理主要通过`try-catch`结构来实现...
这个结构允许开发者定义一段可能抛出异常的代码(在 `TRY` 块中),然后为不同类型的异常定义多个 `CATCH` 块,每个块处理特定类型的异常。最后,`FINALLY` 块中的代码无论是否发生异常都会执行,通常用于资源清理或...
3. finally语句可以与return语句结合使用,但是finally语句的返回值将覆盖try/catch中的return语句。 4. 在finally中写return语句会有警告,因为它会阻止函数抛出异常,而改为正常返回。 Java中finally和return的...
即使在 `try` 块中有 `return` 语句或者 `goto` 语句导致程序流程提前离开,`finally` 块的代码也会被执行。这是 `finally` 关键字的核心特性,确保资源清理逻辑总是能够被执行,比如关闭文件、释放内存等。 以下是...
**注意**:`finally`块可以不与`catch`块一起使用,但是必须与`try`块一起使用。 #### finally关键字的典型应用场景 `finally`关键字最常见的应用场景之一是在需要释放资源的情况下。例如,在与数据库交互的过程中...
- 当`try-catch-finally`块中包含`return`语句时,`finally`块总是会在`return`之前执行。但是,`finally`块的`return`语句会中断`try`块的`return`,使得控制流跳过`try`块的`return`直接返回`finally`的值。 ...
C语言-思维导图C语言思维导图 语言基础 数据类型:整数、浮点数、字符、布尔值、数组、结构体、枚举 变量:声明、初始化、赋值 ...try-catch语句:try块、catch块、finally块 异常类型:runtime error、logical error
如果在`try`块内发生异常,控制权将立即转移到与之匹配的`catch`块。 ```cpp try { // 可能抛出异常的代码 } ``` ### 4. `catch`块 `catch`块用于捕获并处理特定类型的异常。你可以有多个`catch`块来处理不同...
13. **异常处理**:`try-catch-finally`语句块用于捕获和处理程序运行时可能出现的错误。 14. **Lambda表达式**:Java 8引入的新特性,简化了匿名函数的编写。 15. **方法引用来调用函数**:如`Runnable::run`,...
当函数可能会抛出异常时,可以在`try`块中编写可能引发异常的代码,在`catch`块中捕获并处理异常,`finally`块确保无论是否发生异常都会执行的代码: ```java try { // 可能抛出异常的代码 } catch (Exception e...
当`try`块中的代码抛出错误时,`catch`块会被执行,如果`catch`没有捕获到错误,那么`finally`块无论如何都会被执行。这在确保某些操作(例如释放资源)无论代码执行是否成功都得到执行方面非常有用。 在JavaScript...
VB.Net的Try...Catch...Finally语句用于捕获和处理程序运行时可能出现的错误。尝试执行可能出错的代码块置于Try关键字之后,如果发生异常,程序会立即跳转到相应的Catch块来处理错误。多个Catch块可以用来处理不同...
即使在catch块中有一个return语句,finally块的代码也会被执行。 4. **throw关键字**: `throw`关键字用于手动抛出一个异常。开发人员可以根据需要创建自定义异常类,并在适当的时候使用throw关键字抛出这些异常。...
03 try-catch优化为try-catch-finally简化 04 辅助功能-return简写表达式还原,便于阅读理解 05 新增:大数组多解密函数(需要先自行排版,大数组-偏移函数-解密函数1-解密函数2-解密函数3) 06 修复bug-未修改常量...
`try-catch-finally`块是处理异常的关键结构。 7. **访问修饰符**: 除了`public`,还有`private`, `protected`和默认(无修饰符)访问级别,它们控制了函数在类内部、同一包内、子类或其他包中的可见性。 8. **...