`
wangxue
  • 浏览: 8270 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

try { } catch{ } finally{ } 执行顺序总结

阅读更多
-- try catch finally 执行顺序验证
public class TestTry {
	public static void main(String[] args) {
		TestTry t = new TestTry();
		System.out.println(t.getString() + " ---- return执行结束!");
	}

	public String getString() {
		String testString = "abc";
		try {
			System.out.println("执行try!");
//			 int a = 9 / 0;
			return testString;
		} catch (Exception e) {
			System.out.println("执行catch!");
			return testString;
		} finally {
			System.out.println("执行finally!");
		}
	}
}


执行结果:

    [1]执行try!
    [2]执行finally!
    [3]abc ---- return执行结束!

-------------------------------------------------------------------
在try语句中,在执行return语句时,要返回的结果已经准备好了,就在此时,程序转到finally执行了。

在转去之前,try中先把要返回的结果存放到不同于a的局部变量中去,执行完finally之后,在从中取出返回结果,

因此,即使finally中对变量a进行了改变,但是不会影响返回结果。验证实例:
public class Test11 {
	public static void main(String[] args) {
		int b = f();
		System.out.println(b);
	}

	private static int f() {
		int a = 10;
		try {
			a += 10;
			System.out.println("try");
//			int e = 3 / 0;
			a += 10;
			return a;
		} catch (Exception ex) {
			System.out.println("catch");
			return a;
		} finally {
			System.out.println("finally");
			a += 100;
		}
	}
}


执行结果:

    [1]  try
    [2]  finally
    [3]  30


结论:

1.不管出没出现异常,finally块中的语句都会执行;
2.当try或catch块中有return语句时,finally块中的语句仍会执行;
3.finally块中的语句是在return语句执行之后才执行的,即函数返回值是在finally块中语句执行前确定的;
4.finally块中不主张包含return语句,如果加了return在finally块中,将返回这个值。

总结:finally在return前执行,在finally的操作,不会改变已经确定的return的值。



分享到:
评论

相关推荐

    try、catch、finally、return 执行顺序.doc

    try、catch、finally、return 执行顺序详细讲解 try、catch、finally、return 执行顺序是 Java 编程语言中的一种 exception 处理机制,用于处理程序中的异常情况。下面我们来详细讲解 try、catch、finally、return ...

    try catch finally的执行顺序深入分析

    如果在`try`块中的代码没有发生任何异常,那么`catch`块将不会被执行,程序会直接跳到`finally`块。 如果`try`块中的代码确实抛出了一个异常,那么相应的`catch`块会被执行。`catch`块通常包含处理特定异常的代码,...

    try-catch-finally执行顺序验证

    try-catch-finally执行顺序验证(左边是.java文件,右边是.class文件) 提示: try、catch块内的return操作编译后会变成把return的值保存到变量var的操作。 总结: try、catch块内的return操作编译后会变成把return的值...

    Java try catch finally异常处理组合详解

    Java try catch finally异常处理组合详解 Java try catch finally异常处理组합是Java语言中的异常处理机制,用于捕获和处理程序中的异常。下面对try catch finally异常处理组合进行详细的介绍。 try catch组合: ...

    java try…catch嵌套捕获异常的实例

    总结来说,`try-catch`嵌套在Java中用于更精细化的异常处理,允许我们针对不同类型的异常执行不同的恢复策略。通过这种方式,我们可以编写更健壮、更易维护的代码,确保程序在面对错误时能够优雅地处理并继续运行。

    C#中的try catch finally用法分析

    即使在`try`或`catch`块中有`return`语句,`finally`块的代码也会被执行。 ```csharp finally { // 无论是否发生异常都会执行的代码 } ``` 在示例中,无论`j`的值是否为0,`finally`块的`Console.WriteLine(j....

    C# 中的try catch finall 的使用方法

    1. `catch`块的顺序:如果有多个`catch`块,应该将更具体的异常类型放在前面,因为一旦一个`catch`块捕获了异常,后续的`catch`块将不再执行。 2. 避免过度使用`catch`:如果只捕获异常而不处理,可能会掩盖真正的...

    try-catch的用法和含义

    多个 `catch` 块按照它们在代码中的顺序来处理异常。如果某个异常类型被两个或更多 `catch` 块所捕获,则最先定义的那个 `catch` 块会被执行。 #### 六、结论 通过以上的介绍,我们可以看到 `try-catch` 在异常...

    关于Java中try finally return语句的执行顺序浅析

    "Java中try finally return语句的执行顺序浅析" 关于Java中try finally return语句的执行顺序浅析是Java语言中一个重要的知识点,今天我们来探讨一下try finally return语句的执行顺序。 首先,需要了解的是...

    java 中finally语句块与return的执行关系

    在 try-catch-finally 结构中,finally 语句块的执行顺序是非常重要的。下面我们来详细探讨 finally 语句块与 return 的执行关系。 首先,需要了解的是,在 try-finally 或者 catch-finally 中,如果 try 或者 ...

    Java finally语句到底是在return之前还是之后执行?

    `try`块包含可能会抛出异常的代码,`catch`块捕获并处理这些异常,而`finally`块则包含必须执行的清理代码。`finally`的执行规则如下: 1. 如果`try`块中的代码没有抛出异常,那么`finally`块会在`try`块结束时执行...

    java面试题之try中含return语句时代码的执行顺序详解

    总结一下,`try-catch-finally`块中的`return`语句执行顺序如下: 1. `try`块中的代码被执行。 2. 如果遇到`return`语句,会创建一个临时变量,保存`return`语句要返回的值。 3. `finally`块被执行。 4. `finally`...

    C#异常处理中try和catch语句及finally语句的用法示例

    在`finally`块中,即使在`try`或`catch`块中抛出异常,也会执行清理代码。在上面的`CodeWithCleanup`方法中,`finally`块确保了`FileStream`在不再需要时会被关闭,即使在写入过程中发生异常。 需要注意的是,`...

    使用异常处理语句需要注意的几个问题

    1. **不要单独使用 try、catch 或 finally 语句块**:在Java中,`try`语句块用于包含可能抛出异常的代码,`catch`用于捕获并处理特定类型的异常,而`finally`则用于定义无论是否发生异常都要执行的清理代码。...

    java finally块执行时机全面分析

    例如,如果`try`或`catch`块中有一个`return`语句,`finally`块将在`return`之前执行,但不会阻止`return`语句的执行。 关于字节码层面的解释,根据《深入Java虚拟机》一书的描述,`finally`块的实现是通过`jsr`...

    trycatchfinaly

    #### 五、try-catch-finally 的执行顺序 1. **正常执行**:如果`try` 块内的代码正常执行完毕(没有抛出异常),则执行`finally` 块。 2. **异常发生**:如果`try` 块内的代码抛出了异常,并且有对应的`catch` 块...

    Java异常处理-异常处理的方式1

    - 如果try块中的代码抛出异常,将按顺序检查`catch`块,找到匹配异常类型的`catch`并执行相应的处理代码。执行完`catch`后,`finally`块的代码会执行。 - 如果所有`catch`块都不能匹配抛出的异常,异常会被提交给...

    Java异常发生时程序的执行顺序

    4. **return** 与 `try-catch-finally` 结合:如果 `try` 或 `catch` 里有 `return` 语句,`finally` 仍然会执行,但是 `return` 之后的代码不会被执行。在示例 `T2` 中,`finally` 里的 `return` 会覆盖掉 `try` 中...

    浅谈Java finally语句到底是在return之前还是之后执行(必看篇)

    Java 中 finally 语句的执行顺序探讨 在 Java 中,finally 语句的执行顺序是一个常见的探讨话题。很多人都认为 finally 语句一定会被执行,但这是不正确的。在某些情况下,finally 语句可能不会被执行,例如在 try ...

    java面试题 谈谈final, finally, finalize的区别

    这里的 `finally` 块是确保即使在 `try` 或 `catch` 中发生异常,`finally` 里的代码也能得到执行,这对于资源管理非常重要,如关闭数据库连接、文件流等。 3. `finalize()` 方法: `finalize()` 是一个特殊的...

Global site tag (gtag.js) - Google Analytics