当Java程序执行try块、catch块时遇到了return语句或throw语句,这两个语句都会导致该方法立即结束,但是系统并不会立即执行这两个语句,而是去寻找该异常处理流程中是否包含了finall块:
如果没有finall块,程序立即执行return语句或throw语句,方法终止;
如果有finally块,系统立即开始执行finally块——只有当finally块执行完成后,系统才会再次跳回来执行try块、catch块里的return或throw语句。如果finally快里没有return或throw语句,特别注意此时系统已经把要返回的变量的值保存了一个副本,即使在finally块里该变量的值再次发生改变,最终finally块执行完后系统返回的还是那个副本的值。而如果finally快里也包含了return或throw语句等导致方法终止的语句,则finally块已经终止了方法,系统将不会跳回去执行try块、catch块里的任何代码。最终返回的值将视finally块里的代码而定。
比较看看下面这个例子就明白了:
public class Test
{
public static void main(String[] args)
{
System.out.println("return value of getValue(): " + getValue());
System.out.println("return value of getString(): " + getString());
}
public static int getValue()
{
int i = 1;
try
{
return i;
}
finally
{
System.out.println("before finally.i = " + i);
System.out.println("i : finally");
++i;
System.out.println("after finally.i = " + i);
}
}
public static Person getString()
{
Person p = new Person("11");
try
{
System.out.println("before return.p = " + p);
return p;
}
finally
{
System.out.println("i : finally");
p.setName("22");
System.out.println("after finnaly.p = " + p);
return p;
}
}
static class Person
{
private String name;
public Person(String name)
{
this.name = name;
}
public void setName(String name)
{
this.name = name;
}
public String toString()
{
return this.name;
}
}
}
分享到:
相关推荐
Java的 try 与 catch finally关键字的使用
`finally`块是可选的,无论`try`和`catch`块中的代码是否抛出异常,`finally`块里的代码都会被执行。这通常用于资源清理,如关闭文件流、网络连接等。即使在`try`或`catch`块中有return语句,`finally`块的代码也会...
即使`try`或`catch`块中存在`return`语句,`finally`块的代码也会被执行。这确保了程序的整洁和资源的有效管理。 在Java中,`try-catch-finally`结构可以单独使用,也可以嵌套使用。嵌套的`try-catch-finally`允许...
try、catch、finally、return 执行顺序的规则是:try 语句用于包装可能抛出异常的代码,catch 语句用于捕捉 try 语句中的异常,finally 语句用于执行一些清理工作,return 语句用于从方法中返回值。finally 语句是在...
1. try块中的代码执行时,如果出现异常,会跳转到catch块。 2. catch块捕获到异常后,执行异常处理代码。 3. 无论try块中是否出现异常,最终都会执行finally块。 4. finally块执行完毕后,程序继续执行下一条语句。 ...
VB.NET 演示带Finally的Try Catch 异常处理用法...使用Finally的好处是,把资源释放或状态还原的代码放到finally块中,可以保证在try和catch语句执行完后,一定会执行finally语句块,而不用考虑各种复杂的跳转情况。
Java try catch finally异常处理组合详解 Java try catch finally异常处理组합是Java语言中的异常处理机制,用于捕获和处理程序中的异常。下面对try catch finally异常处理组合进行详细的介绍。 try catch组合: ...
17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句...
如果在`try`块中的代码没有发生任何异常,那么`catch`块将不会被执行,程序会直接跳到`finally`块。 如果`try`块中的代码确实抛出了一个异常,那么相应的`catch`块会被执行。`catch`块通常包含处理特定异常的代码,...
在这个结构中,`try`块包含可能会抛出异常的代码,每个`catch`块分别捕获不同类型的异常,`finally`块则包含需要无论发生何种情况都必须执行的代码,如资源清理。 接下来,我们来探讨嵌套的`try-catch`块。当一个`...
Condition 3: try中有异常,try-catch-finally里都没有return ,finally 之后有个returntry中有异常以后,根据
`finally`块用于存放必须执行的代码,无论`try`块中是否发生异常,`finally`块中的代码都会被执行。这使得`finally`块成为释放资源的理想位置,例如关闭文件流或数据库连接等。 #### 五、多catch块 当程序中可能...
总之,"trycatch.zip"中的示例展示了如何在Golang中模仿`try...catch`和`try...catch...finally`结构,通过自定义的函数和闭包实现了异常处理功能,这对于编写需要优雅处理错误的Golang代码来说非常有用。
当在`try`块内的代码执行过程中出现异常时,控制权会立即转移到与之相关的`catch`块。如果没有异常发生,`catch`块的代码则不会被执行。 ```csharp try { // 可能抛出异常的代码 } ``` 2. `catch`块: `catch`块...
try-catch-finally执行顺序验证(左边是.java文件,右边是.class文件) 提示: try、catch块内的return操作编译后会变成把return的值保存到变量var的操作。 总结: try、catch块内的return操作编译后会变成把return的值...
通过合理地使用`try`、`catch`、`throw`和`exception`等关键字,开发者不仅能够编写更加可靠的代码,还能显著提升程序的可维护性和可读性。 #### 二、C++标准异常处理 ##### 1. 构造和析构中的异常抛出 在C++中,...
通过`try-catch-finally`,开发者可以更好地控制程序的异常流程,提高代码的稳定性和可靠性。在阅读`try catch使用说明.txt`文件和使用`trycf.snippet`代码片段时,可以更深入地理解这一机制,并将其应用到自己的C#...
当程序执行到 `try` 块中的代码时,如果未发生任何异常,则程序将继续正常执行;一旦出现异常,控制权将立即转移到与该异常类型匹配的第一个 `catch` 块。如果没有与异常类型匹配的 `catch` 块,则程序会继续向上抛...
`finally` 块则是一个可选的块,无论 `try` 或 `catch` 是否执行成功,都会执行 `finally` 中的代码。它通常用来存放清理资源或执行必要操作的代码,如关闭文件流或释放内存。`finally` 的重要性在于,即使 `try` 或...
即使在`try`或`catch`块中有`return`语句,`finally`块中的代码也会被执行: ```java try { // 代码 } catch (ExceptionType1 e1) { // 处理 } catch (ExceptionType2 e2) { // 处理 } finally { // 清理资源,...