java异常处理return_java中异常处理中return的用法.doc

41528d3028836879cd698677c3999917.gifjava中异常处理中return的用法.doc

JAVA中异常处理中RETURN的用法关于TRY、CATCH、FINALLY语句块中含有RETURN语句的几点说明1、第一种情况TRY块有RETURN语句,CATCH块没有RETURN,函数末尾也没有RETURN看代码IMPORTJAVAUTILPUBLICCLASSDEMO{PUBLICSTATICVOIDMAINSTRINGARGS{INTNUM10TESTNUM}PUBLICSTATICINTTESTINTB{TRY{B10RETURNB}CATCHEXCEPTIONE{}FINALLY{}}}编译结果H\JAVADEMOJAVACDEMOJAVADEMOJAVA18缺少返回语句}1错误有人可能会说,我在TRY块中不是有RETURN语句吗为什么会提示缺少RETURN语句呢这是因为编译器认为TRY块中是又可能产生异常操作的,也就是说在RETURN语句之前如果出现异常的话,那么RETURN语句根本没有机会得到执行,所以编译器会认为缺少RETURN语句。解决办法A、在CATCH块中加入RETURN语句,因为一旦出现异常,CATCH中的语句可以保证函数会有一个返回值B、在FINALLY块中加入RETURN语句,同样只要系统不退出,FINALLY语句块会始终得到执行的代码IMPORTJAVAUTILPUBLICCLASSDEMO{PUBLICSTATICVOIDMAINSTRINGARGS{INTNUM10SYSTEMOUTPRINTLNTESTNUM}PUBLICSTATICINTTESTINTB{TRY{B10RETURNB}CATCHEXCEPTIONE{}FINALLY{RETURN0}}}C、在函数末尾加入RETURN语句代码IMPORTJAVAUTILPUBLICCLASSDEMO{PUBLICSTATICVOIDMAINSTRINGARGS{INTNUM10SYSTEMOUTPRINTLNTESTNUM}PUBLICSTATICINTTESTINTB{TRY{B10RETURNB}CATCHEXCEPTIONE{}FINALLY{}RETURN0}}2、第二种情况,看代码IMPORTJAVAUTILPUBLICCLASSDEMO{PUBLICSTATICVOIDMAINSTRINGARGS{INTNUM10SYSTEMOUTPRINTLNTESTNUM}PUBLICSTATICINTTESTINTB{TRY{B10}RETURN0}}结果H\JAVADEMOJAVACDEMOJAVADEMOJAVA8“TRY“不带有“CATCH“或“FINALLY“TRY{1错误说明也就是说,如果有TRY语句的话,可以有CATCH语句,没有FINALLY语句,但是如果没有CATCH语句的话,那么一定要有FINALLY语句。并且如果出现CATCH语句的话,CATCH语句可以出现多次,而FINALLY语句只能出现一次。代码PUBLICCLASSDEMO{PUBLICSTATICVOIDMAINSTRINGARGS{INTNUM10SYSTEMOUTPRINTLNTESTNUM}PUBLICSTATICINTTESTINTB{TRY{B10}CATCHRUNTIMEEXCEPTIONE{}CATCHEXCEPTIONE2{}FINALLY{}RETURN0}}3、第三种情况A、TRY块中有RETURN语句,那么是先执行RETURN语句,还是先执行FINALLY语句。大家通常会有一个错误的认识,可能有的老师都会讲错,认为是先执行FINALLY语句,再执行RETURN语句,但是这是错误的,事实上是先执行RETURN语句,再执行FINALLY语句,然后将结果返回,也可以说RETURN语句执行了两次,一次在FINALLY之前,一次在FINALLY之后,但是返回的确是第一次执行的值,如果有不信的,请继续看代码,此段代码可以证明我的观点代码PUBLICCLASSDEMO{PUBLICSTATICVOIDMAINSTRINGARGS{INTNUM10SYSTEMOUTPRINTLNTESTNUM}PUBLICSTATICINTTESTINTB{TRY{B10RETURNB}CATCHRUNTIMEEXCEPTIONE{}CATCHEXCEPTIONE2{}FINALLY{B10}RETURN0}}结果H\JAVADEMOJAVACDEMOJAVAH\JAVADEMOJAVADEMO20说明此处需要引入缓冲的概念,有对缓冲不太了解的也没关系,程序运行结果是20足以证明我的观点,程序执行流程是进入TRY语句块执行RETURN语句,但是程序有FINALLY语句块,所有先将RETURN返回的值缓冲起来,然后程序跳转到FINALLY语句块执行,我在FINALLY语句块中修改了变量B的值,但是程序返回的依然是20,并不是30,说明FINALLY语句块执行完毕后,程序直接将之前缓冲的值返回了。所以这就是真实的执行流程。B、TRY块中有RETURN,FINALLY语句块中也有RETURN,此时的情况是什么样呢看代码PUBLICCLASSDEMO{PUBLICSTATICVOIDMAINSTRINGARGS{INTNUM10SYSTEMOUTPRINTLNTESTNUM}PUBLICSTATICINTTESTINTB{TRY{B10RETURNB}CATCHRUNTIMEEXCEPTIONE{}CATCHEXCEPTIONE2{}FINALLY{B10RETURNB}}}结果是H\JAVADEMOJAVADEMO30说明为什么此时结果是30了呢,大家都知道RETURN语句的作用是结束程序体,所以此段代码依然是先执行TRY块中的RETURN语句,并将20缓存起来,接着跳转到FINALLY语句块执行,但是由于FINALLY语句块中有RETURN语句,所以程序在此处结束,并不返回到TRY块中返回结果,而是直接将FINALLY块中新修改的值即30,返回。C、TRY块中有RETURN语句,CATCH块中也有RETURN语句,这时候是最简单的一种情况看代码PUBLICCLASSDEMO{PUBLICSTATICVOIDMAINSTRINGARGS{INTNUM10SYSTEMOUTPRINTLNTESTNUM}PUBLICSTATICINTTESTINTB{TRY{INTAB/0RETURNB}CATCHEXCEPTIONE2{B10RETURNB}}}结果H\JAVADEMOJAVADEMO20说明我在TRY块中触发了一个异常,程序跳入CATCH语句块,TRY语句块中剩下的所以语句均没有执行的机会,接着,我在CATCH块中修改了B的值,此时B应该是20,然后将B值返回,与运行结果相符。以上几点基本涵盖了大部分的情况,掌握这些知识点基本可以应付多数此类问题,如果有什么错误,遗漏欢迎指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值