`

try catch finally 块 与 函数的return

阅读更多
先看一个没有异常的情况
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后的代码是无效的.
分享到:
评论
2 楼 ap0406708 2011-11-24  
uuu999ggg 写道
连return都写错了

1 楼 uuu999ggg 2011-07-28  
连return都写错了

相关推荐

    try-catch-finally-return-in-finally.rar_return

    标题 "try-catch-finally-return-in-finally.rar_return" 提到了 `try-catch-finally` 结构与 `return` 语句的交互,这涉及到程序执行流程的关键方面。 `try` 块是用来包含可能会抛出异常的代码。如果在 `try` 块中...

    trycatch.zip

    总之,"trycatch.zip"中的示例展示了如何在Golang中模仿`try...catch`和`try...catch...finally`结构,通过自定义的函数和闭包实现了异常处理功能,这对于编写需要优雅处理错误的Golang代码来说非常有用。

    关于Java中的try-catch-finally语句和return

     第二:finally里面不建议放return语句,根据需要,return语句可以放在try和catch里面和函数的后。可行的做法有四:  1、return语句只在函数后出现一次。  2、return语句仅在try和catch里面都出现。  3、...

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

    在这个过程中,函数会将`try`或`catch`块中的`return`语句返回的值暂存起来,然后执行`finally`块。 如果在`finally`块中也有`return`语句,那么这个`return`值会覆盖之前暂存的值。也就是说,最终返回给调用者的值...

    Try…Catch使用小结

    2. **资源管理**:Try…Catch 结合 Finally 语句块常用于确保资源(如数据库连接、文件流等)在任何情况下都能被正确关闭。例如,在示例中,即使在打开数据库连接时出现异常,Finally 块也会确保在程序退出前关闭...

    Java 实例 - Finally的用法源代码-详细教程.zip

    `finally`通常与`try-catch`块一起使用,构成一个完整的异常处理结构。下面将详细探讨`finally`的用法、作用以及相关的编程实践。 1. `try-catch-finally`结构: 在Java中,异常处理主要通过`try-catch`结构来实现...

    Power builder9异常处理

    这个结构允许开发者定义一段可能抛出异常的代码(在 `TRY` 块中),然后为不同类型的异常定义多个 `CATCH` 块,每个块处理特定类型的异常。最后,`FINALLY` 块中的代码无论是否发生异常都会执行,通常用于资源清理或...

    Java中finally和return的关系实例解析

    3. finally语句可以与return语句结合使用,但是finally语句的返回值将覆盖try/catch中的return语句。 4. 在finally中写return语句会有警告,因为它会阻止函数抛出异常,而改为正常返回。 Java中finally和return的...

    C++ 中try finally关键字详解

    即使在 `try` 块中有 `return` 语句或者 `goto` 语句导致程序流程提前离开,`finally` 块的代码也会被执行。这是 `finally` 关键字的核心特性,确保资源清理逻辑总是能够被执行,比如关闭文件、释放内存等。 以下是...

    Java软件开发实战 Java基础与案例开发详解 10-5 finally关键字 共7页.pdf

    **注意**:`finally`块可以不与`catch`块一起使用,但是必须与`try`块一起使用。 #### finally关键字的典型应用场景 `finally`关键字最常见的应用场景之一是在需要释放资源的情况下。例如,在与数据库交互的过程中...

    java面试精华7

    - 当`try-catch-finally`块中包含`return`语句时,`finally`块总是会在`return`之前执行。但是,`finally`块的`return`语句会中断`try`块的`return`,使得控制流跳过`try`块的`return`直接返回`finally`的值。 ...

    C语言-思维导图源文件

    C语言-思维导图C语言思维导图 语言基础 数据类型:整数、浮点数、字符、布尔值、数组、结构体、枚举 变量:声明、初始化、赋值 ...try-catch语句:try块、catch块、finally块 异常类型:runtime error、logical error

    C++catch_test.zip

    如果在`try`块内发生异常,控制权将立即转移到与之匹配的`catch`块。 ```cpp try { // 可能抛出异常的代码 } ``` ### 4. `catch`块 `catch`块用于捕获并处理特定类型的异常。你可以有多个`catch`块来处理不同...

    java函数速查手册常用函数

    13. **异常处理**:`try-catch-finally`语句块用于捕获和处理程序运行时可能出现的错误。 14. **Lambda表达式**:Java 8引入的新特性,简化了匿名函数的编写。 15. **方法引用来调用函数**:如`Runnable::run`,...

    java编程主要函数的用法详解

    当函数可能会抛出异常时,可以在`try`块中编写可能引发异常的代码,在`catch`块中捕获并处理异常,`finally`块确保无论是否发生异常都会执行的代码: ```java try { // 可能抛出异常的代码 } catch (Exception e...

    try finally 妙用,防止内存泄漏

    当`try`块中的代码抛出错误时,`catch`块会被执行,如果`catch`没有捕获到错误,那么`finally`块无论如何都会被执行。这在确保某些操作(例如释放资源)无论代码执行是否成功都得到执行方面非常有用。 在JavaScript...

    VB.Net常用语法

    VB.Net的Try...Catch...Finally语句用于捕获和处理程序运行时可能出现的错误。尝试执行可能出错的代码块置于Try关键字之后,如果发生异常,程序会立即跳转到相应的Catch块来处理错误。多个Catch块可以用来处理不同...

    java基础关于异常处理方式

    即使在catch块中有一个return语句,finally块的代码也会被执行。 4. **throw关键字**: `throw`关键字用于手动抛出一个异常。开发人员可以根据需要创建自定义异常类,并在适当的时候使用throw关键字抛出这些异常。...

    AST反混淆js还原工具2.3(20231219)

    03 try-catch优化为try-catch-finally简化 04 辅助功能-return简写表达式还原,便于阅读理解 05 新增:大数组多解密函数(需要先自行排版,大数组-偏移函数-解密函数1-解密函数2-解密函数3) 06 修复bug-未修改常量...

    java经典小程序-函数小程序

    `try-catch-finally`块是处理异常的关键结构。 7. **访问修饰符**: 除了`public`,还有`private`, `protected`和默认(无修饰符)访问级别,它们控制了函数在类内部、同一包内、子类或其他包中的可见性。 8. **...

Global site tag (gtag.js) - Google Analytics