java中异常与return

抽时间整理了下java中异常与return,以前这块总是弄混淆,觉得还是写下来慢慢整理比较好。由于水平有限,仅供参考。废话不多说,直接上代码。

下面是两个方法:

throwReturn(){ 2int ret = 0; 3try{ 4ret = 10/0 ; 5ret++; 6return ret; 7}catch(Exception e){ 8System.out.println(“catch block ” + e.getMessage()); ret;11}finally{12System.out.println(“finally block invoked!!!”);13ret++;14System.out.println(“finally block invoked, ret is ” + ret);15 }

finallyReturn(){ 2int ret = 0; 3try{ 4ret = 10/0 ; 5ret++; 6return ret; 7}catch(Exception e){ 8System.out.println(“catch block ” + e.getMessage()); ret;11}finally{12System.out.println(“finally block invoked!!!”);13ret++;14System.out.println(“finally block invoked, ret is ” + ret);15return ret;16 }1718}

然后在主方法中分别调用两个方法:

main(String args[]){2 System.out.println(“throwReturn:” + throwReturn());}

第一个方法输出结果:

catch block / by zerofinally block invoked!!!finally block invoked, ret is 1throwReturn:0

throwRetrun方法返回的结果并不是我预想的1,而是0。

个人分析:

第二个方法的输出结果:

catch block / by zerofinally block invoked!!!finally block invoked, ret is 1finallyReturn:1

哎,这次的输出结果是1了。

仔细比较两个方法发现第二个方法,在finally语句中多了一个return ret;程序的执行过程同上面基本上是一样的,只是在最终执行finally代码块是碰到了return语句,此时程序就直接将ret的值返回了,而此时ret的值是1,最后输出:finallyReturn:1

接下来我们再看2个方法:

throwException() throws Exception{ 2int ret = 0; 3try{ 4ret = 10/0 ; 5System.out.println(“ret:” + ret); 6return ret; 7}catch(Exception e){ 8System.out.println(“catch block ” + e.getMessage()); 9throw e;10}finally{11System.out.println(“finally block invoked!!!”);12ret++;13System.out.println(“finally block invoked, ret is ” + ret);14 }1516}

finallyThrowException() throws Exception{ 2int ret = 0; 3try{ 4ret = 10/0 ; 5System.out.println(“ret:” + ret); 6return ret; 7}catch(Exception e){ 8System.out.println(“catch block ” + e.getMessage()); 9throw e;10}finally{11System.out.println(“finally block invoked!!!”);12ret++;13System.out.println(“finally block invoked, ret is ” + ret);14return ret;15 }1617}

然后在主方法中分别调用两个上面方法:

main(String args[]){ 2try { 3System.out.println(“throwException:” + throwException()); 4} catch (Exception e) { 5System.out.println(“捕获到throwException方法抛出的异常,” + e.getMessage()); 6 } try { 9 System.out.println(“finallyThrowException:” + finallyThrowException());10 } catch (Exception e) {11 System.out.println(“捕获到finallyThrowException方法抛出的异常,” + e.getMessage());}

第一个方法输出结果:

catch block / by zerofinally block invoked!!!finally block invoked, ret is 1捕获到throwException方法抛出的异常,/ by zero

个人分析:

第二个方法的输出结果:

catch block / by zerofinally block invoked!!!finally block invoked, ret is 1finallyThrowException:1

观察输出结果会发现,主方法并没有捕获到finallyThrowException方法调用时的异常(catch块的打印没有执行)。

这两个方法的主要区别也是在于:在finallyThrowException方法的finally块中多出了return ret语句。调用finallyThrowException方法的执行过程同调用throwException方法基本一致。

从finallyThrowException方法执行结果可以看出方法执行时的异常被丢失了

最后再来看一个小例子

人,也总是很难发现自己的错误,

java中异常与return

相关文章:

你感兴趣的文章:

标签云: