try、catch、finally巧遇return

标签: try catch finally | 发表时间:2013-10-01 20:12 | 作者:kiritor
出处:http://blog.csdn.net

Java异常处理

         Java的基本理念是“结构不佳的代码不能运行”--Thinking in Java。

         Java中的异常处理是一种在编译阶段的错误报告机制,是通过编译器强制执行的。不过尚须明白的

是:编译期间并不能找出所有的错误,余下的问题必须在运行期间解决。

         简单的来说,异常处理目的在于通过少量的代码是你的程序更加可靠。

try、catch、finally巧遇return

          对于Java中异常如何使用,这里笔者不在提及。这里笔者感兴趣的是try、catch、finally块中遭遇

return语句时的执行情况,以及其返回值情况(总有这些笔试、面试题)。

          首先需要注意的是方法执行到return语句便会返回结果并终止是错误的,特例就是Java的异常体系。

          看下面的例子程序:

package com.al;

public class ExceptionTest{
    @SuppressWarnings("finally")
	public String test(){
    	String returnStr ="start";
    	try {
			System.out.println("start String:"+returnStr);
			returnStr="try innner";
			throw new Exception("inner Exception");
		} catch (Exception e) {
			returnStr ="catch inner";
			return returnStr;
		}finally{
			returnStr = "finally";
			System.out.println("inner finally:"+returnStr);
			return returnStr;
		}
    }
    
    public static void main(String[] args) {
		ExceptionTest exceptionTest = new ExceptionTest();
		try {
		   String test=	exceptionTest.test();
			Thread.sleep(300);
			System.out.println("returnString:"+test);
		} catch (InterruptedException e) {
			// TODO: handle exception
		}
	}
}
                       输出结果为:

                                start String:start
                                inner finally:finally
                                returnString:finally

           掌握下面的几条规则我们就可以很好的解决巧遇return的问题了。

           1、finally语句块的代码是必定会执行的,而catch语句块的代码只有发生异常时才能执行

           2、方法执行碗try中的return之后不会终止,会继续执行catch(try中抛出异常时)、finally块

           3、方法必须确保返回值,且该值唯一。

           4、return语句的优先级是finally最大,且try、catch两者之一的return会被执行,为保证

                 第3条原则,返回优先级最大的值。

           对于一个具有返回值的方法来说,保证该方法具有一个返回值在编译阶段就必须被确认。

 try中如果包含return语句,则catch块和finally中必须有一个return语句.。另一种情况是try中通过

 throw抛出异常,同样catch与finally至少有一个retrun语句。因为try块会假定其中发生异常,

  且try块中的代码要么顺利执行,要么抛出异常。如果只在try块中包含return语句不能保证函数有

  返回值(如try抛出时,return语句不会执行)。所以为了保证函数具有返回值,java强制要求原则。


作者:kiritor 发表于2013-10-1 12:12:24 原文链接
阅读:154 评论:0 查看评论

相关 [try catch finally] 推荐:

try、catch、finally巧遇return

- - CSDN博客编程语言推荐文章
         Java的基本理念是“结构不佳的代码不能运行”--Thinking in Java.          Java中的异常处理是一种在编译阶段的错误报告机制,是通过编译器强制执行的. 是:编译期间并不能找出所有的错误,余下的问题必须在运行期间解决.          简单的来说,异常处理目的在于通过少量的代码是你的程序更加可靠.

try-catch-finally中的4个大坑,不小心就栽进去了!

- - 掘金 后端
在 Java 语言中 try-catch-finally 看似简单,一副人畜无害的样子,但想要真正的“掌控”它,却并不是一件容易的事. 别的不说,咱就拿 fianlly 来说吧,别看它的功能单一,但使用起来却“暗藏杀机”,若您不信,咱来看下面的这几个例子.... 坑1:finally中使用return.

确保try...finally...和using会执行完毕

- Lee - 博客园-首页原创精华区
但是你确信你的try...finally...块在发生异常时一定会执行finally,你的using块发生异常时一定会执行Dispose方法吗. 我们首先来看看try...finally...,请先建立一个控制台项目,在粘贴如下代码:. 这段代码很简单就是在try块发生异常后执行demo.Dispose()在控制台上输出一个字符串,但是请执行该代码,在抛出异常后点否(即不调试),结果你会发现控制台上什么都没有输出,而且程序的进程被终止了.

try! try! try!–在浏览器里试用NoSQL产品

- Leo Pay - NoSQLfan
通常要使用某个存储设备,我们可能需要经历下载、安装、配置、启动等多个过程,然后才能开始试验具体的试用. 而在我们很多 NoSQL 产品中,提供了一些非常方便的试用途径,可以让你不用安装一个自己的 Server 即可直接试用并学习其功能:. 1.try redis 在浏览器里试用Redis. 地址:http://try.redis-db.com/.

RAISERROR 抛出的错误未进入 CATCH 块

- - CSDN博客推荐文章
今天写了一个储存过程,希望当出错时通过 RAISERROR 抛出错误进入 CATCH 块,代码如下:. print 'exptype=' + coalesce(@exptype, '不存在'). raiserror('该导出不存在或者已经被撤销了', 10, 1). raiserror('尚未实现该功能', 10, 1).

关于 Java 中 finally 语句块的深度辨析

- myartings - IBM developerWorks 中国 : 文档库
乍看这个题目,是不是有人会问,这个谁不知道啊,大凡熟悉 Java 编程的人都知道 finally 语句块的作用和用法. 事实并非如此,我发现即使写了很多年 Java 程序的人,也不一定能够透彻的理解 finally 语句块. 本篇将以生动形象的案例来带您由浅入深的来分析一下这个小小的 finally,希望这篇文章能够让您真正的理解 finally 语句块的本质,至少阅读完本篇文章后,没有觉得浪费了时间.