现在的位置: 首页 > 综合 > 正文

try、catch、finally巧遇return try、catch、finally巧遇return

2017年11月04日 ⁄ 综合 ⁄ 共 2183字 ⁄ 字号 评论关闭
 

try、catch、finally巧遇return

分类: 【Thinking in Java】 57人阅读 评论(0) 收藏 举报

目录(?)[+]

Java异常处理

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

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

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

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

try、catch、finally巧遇return

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

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

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

          看下面的例子程序:

[java] view
plain
copy

  1. package com.al;  
  2.   
  3. public class ExceptionTest{  
  4.     @SuppressWarnings("finally")  
  5.     public String test(){  
  6.         String returnStr ="start";  
  7.         try {  
  8.             System.out.println("start String:"+returnStr);  
  9.             returnStr="try innner";  
  10.             throw new Exception("inner Exception");  
  11.         } catch (Exception e) {  
  12.             returnStr ="catch inner";  
  13.             return returnStr;  
  14.         }finally{  
  15.             returnStr = "finally";  
  16.             System.out.println("inner finally:"+returnStr);  
  17.             return returnStr;  
  18.         }  
  19.     }  
  20.       
  21.     public static void main(String[] args) {  
  22.         ExceptionTest exceptionTest = new ExceptionTest();  
  23.         try {  
  24.            String test= exceptionTest.test();  
  25.             Thread.sleep(300);  
  26.             System.out.println("returnString:"+test);  
  27.         } catch (InterruptedException e) {  
  28.             // TODO: handle exception  
  29.         }  
  30.     }  
  31. }  

                       输出结果为:

                                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强制要求原则。

抱歉!评论已关闭.