java中异常处理中return的用法.doc_第1页
java中异常处理中return的用法.doc_第2页
java中异常处理中return的用法.doc_第3页
java中异常处理中return的用法.doc_第4页
java中异常处理中return的用法.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

java中异常处理中return的用法关于try、catch、finally语句块中含有return语句的几点说明:1、第一种情况:try块有return语句,catch块没有return,函数末尾也没有return:看代码:import java.util.*;public class Demopublic static void main(String args)int num = 10;test(num);public static int test(int b)tryb += 10;return b; catch(Exception e)finally编译结果:H:java Demojavac Demo.javaDemo.java:18: 缺少返回语句 1 错误有人可能会说,我在try块中不是有return语句吗?为什么会提示缺少return语句呢?这是因为编译器认为try块中是又可能产生异常操作的,也就是说在return语句之前如果出现异常的话,那么return语句根本没有机会得到执行,所以编译器会认为缺少return语句。解决办法:a、在catch块中加入return语句,因为一旦出现异常,catch中的语句可以保证函数会有一个返回值b、在finally块中加入return语句,同样只要系统不退出,finally语句块会始终得到执行的代码:import java.util.*;public class Demopublic static void main(String args)int num = 10;System.out.println(test(num);public static int test(int b)tryb += 10;return b; catch(Exception e)finallyreturn 0;c、在函数末尾加入return语句代码:import java.util.*;public class Demopublic static void main(String args)int num = 10;System.out.println(test(num);public static int test(int b)tryb += 10;return b; catch(Exception e)finallyreturn 0;2、第二种情况,看代码:import java.util.*;public class Demopublic static void main(String args)int num = 10;System.out.println(test(num);public static int test(int b)tryb += 10;return 0;结果:H:java Demojavac Demo.javaDemo.java:8: try 不带有 catch 或 finally try 1 错误说明:也就是说,如果有try语句的话,可以有catch语句,没有finally语句,但是如果没有catch语句的话,那么一定要有finally语句。并且如果出现catch语句的话,catch语句可以出现多次,而finally语句只能出现一次。代码:public class Demopublic static void main(String args)int num = 10;System.out.println(test(num);public static int test(int b)tryb += 10;catch(RuntimeException e)catch(Exception e2)finallyreturn 0;3、第三种情况:a、try块中有return语句,那么是先执行return语句,还是先执行finally语句。大家通常会有一个错误的认识,可能有的老师都会讲错,认为是先执行finally语句,再执行return语句,但是这是错误的,事实上是先执行return语句,再执行finally语句,然后将结果返回,也可以说return语句执行了两次,一次在finally之前,一次在finally之后,但是返回的确是第一次执行的值,如果有不信的,请继续看代码,此段代码可以证明我的观点:代码:public class Demopublic static void main(String args)int num = 10;System.out.println(test(num);public static int test(int b)tryb += 10;return b;catch(RuntimeException e)catch(Exception e2)finallyb += 10;return 0;结果:H:java Demojavac Demo.javaH:java Demojava Demo20说明:此处需要引入缓冲的概念,有对缓冲不太了解的也没关系,程序运行结果是20足以证明我的观点,程序执行流程是进入try语句块执行return语句,但是程序有finally语句块,所有先将return返回的值缓冲起来,然后程序跳转到finally语句块执行,我在finally语句块中修改了变量b的值,但是程序返回的依然是20,并不是30,说明finally语句块执行完毕后,程序直接将之前缓冲的值返回了。所以这就是真实的执行流程。b、try块中有return,finally语句块中也有return,此时的情况是什么样呢?看代码:public class Demopublic static void main(String args)int num = 10;System.out.println(test(num);public static int test(int b)tryb += 10;return b;catch(RuntimeException e)catch(Exception e2)finallyb += 10;return b;结果是:H:java Demojava Demo30说明:为什么此时结果是30了呢,大家都知道return语句的作用是结束程序体,所以此段代码依然是先执行try块中的return语句,并将20缓存起来,接着跳转到finally语句块执行,但是由于finally语句块中有return语句,所以程序在此处结束,并不返回到try块中返回结果,而是直接将finally块中新修改的值即30,返回。c、try块中有return语句,catch块中也有return语句,这时候是最简单的一种情况:看代码:public class Demopublic static void main(String args)int num = 10;System.out.println(test(num);public static int test(int b)tryint a = b/0;return b;catch(Exception e2)b += 10;return b;结果:H:java Demojav

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论