`

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都写错了

相关推荐

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

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

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

    首先执行try,如果有异常执行catch,无论如何都会执行finally,当有return以后,函数就会把这个数据存储在某个位置,然后告诉主函数,我不执行了,接下来你执行吧,所以函数就会推出

    谈谈Java中try-catch-finally中的return语句

    我们知道return语句用在某一个方法中,一是用于返回函数的执行结果,二是用于返回值为void类型的函数中,仅仅是一个return语句(return ;),此时用于结束方法的执行,也即此return后的语句将不会被执行,当然,这种...

    VB.Net常用语法

    在一个try………end try 过程中可以使用catch与finally两个中的一 个,或者两个一起用, 二:Protected, private, Public 封装控制 这三个关键字一般放在语句最前面,而会置于overloads与Overrides的 后面...

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

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

    JSTL详细标签库介绍

    …… try{抛出一个异常}-----程序块 ……catch1{异常处理程序1};……catch100 {异常处理程序100}; finally{无类是否出现异常都执行的程序} <BR>1、 若try抛出Exception,App寻找在Catch1~100寻找合适异常处理...

    js只执行1次的函数示例

    在我们日常开发的时候,经常会碰到一种这样的情况:想让某个函数只执行一次,特别是在一些循环或定时执行的时候。 废话不多说,直接上代码: function runOnce(fn, context) { //控制让函数只触发一次 return ...

    学生管理系统--C#

    (1)自定义函数类代码: public class LinkDataBase { private string strSQL; //与SQL Server 的连接字符串设置 //与数据库的连接 private string connectionString = "server = .;database=stu_Manage;uid=sa...

    最新各大公司企业真实面试题-NewEgg.面试题.txt

    1. finally和return的关系:finally块用于释放资源,return用于返回函数结果,在try-catch-finally中,finally块总是被执行。 2. 页面重定向的方式:包括客户端重定向、服务器端重定向、JavaScript重定向等。 3. ...

    SelBlocks:Selenium IDE 的 SelBlocks 扩展

    elseIf , else try , catch , finally , throw for , foreach , while , continue , break call , function , return loadJsonVars , loadXmlVars , forJson , forXml exitTest 函数和循环参数使用块本地的...

    finally 一定会执行(实例代码)

    @SuppressWarnings(finally) static int compute (){ Exc e = new Exc(); e.a = 10; e.b = 10; int res = 0 ; try{ res = e.a / e.b; System.out.println(try ……); return res + 1; }catch...

    画布上显示的控件

    } finally { if (canvas != null) sfh.unlockCanvasAndPost(canvas); } } /** * 触屏事件监听 */ @Override public boolean onTouchEvent(MotionEvent event) { return true; } /** * 按键事件监听 ...

    C#语言规范(4.0版本)

    5.3.3.15 try-catch-finally 语句 101 5.3.3.16 foreach 语句 102 5.3.3.17 using 语句 102 5.3.3.18 lock 语句 102 5.3.3.19 yield 语句 102 5.3.3.20 简单表达式的一般规则 102 5.3.3.21 带有嵌入表达式的表达式的...

    微软C#语言规范,C#语言教程中文版

    5.3.3.15 try-catch-finally 语句 101 5.3.3.16 foreach 语句 102 5.3.3.17 using 语句 102 5.3.3.18 lock 语句 102 5.3.3.19 yield 语句 102 5.3.3.20 简单表达式的一般规则 102 5.3.3.21 带有嵌入表达式的表达式的...

    C#语言规范4.0

    5.3.3.15 try-catch-finally 语句 101 5.3.3.16 foreach 语句 102 5.3.3.17 using 语句 102 5.3.3.18 lock 语句 102 5.3.3.19 yield 语句 102 5.3.3.20 简单表达式的一般规则 102 5.3.3.21 带有嵌入表达式的表达式的...

    C#语言规范(2.0,3.0,4.0合集)

    5.3.3.15 try-catch-finally 语句 101 5.3.3.16 foreach 语句 102 5.3.3.17 using 语句 102 5.3.3.18 lock 语句 102 5.3.3.19 yield 语句 102 5.3.3.20 简单表达式的一般规则 102 5.3.3.21 带有嵌入表达式的表达式的...

    C#_语言规范_4.0_中文版

    5.3.3.15 try-catch-finally 语句 101 5.3.3.16 foreach 语句 102 5.3.3.17 using 语句 102 5.3.3.18 lock 语句 102 5.3.3.19 yield 语句 102 5.3.3.20 简单表达式的一般规则 102 5.3.3.21 带有嵌入表达式的表达式的...

    java中的IO操作总结(四)

    //此处创建文件写入流的引用是要给ObjectOutputStream的构造函数玩儿 FileOutputStream fos = null; ObjectOutputStream oos = null; try { fos = new FileOutputStream(path); oos = new ObjectOutputStream...

    Excel POI读取封装(文件+示范代码)

    // 将从Excel表格读取到的数据与配置文件筛选成可以插入到数据库的数据 public List, Object>> parseExcelData( List, String>> excelDataMap, Map, List<ExcelMap>> dbfield) { List, Object>> list = new ...

Global site tag (gtag.js) - Google Analytics