try catch finally 用法

try catch finally 用法在讲之前我们先看一段程序:publicclassTest{publicstaticvoidmain(String[]args){System.out.println("returnvalueofgetValue():"+getValue());} publicstaticintgetValue(){…

大家好,又见面了,我是你们的朋友全栈君。

在讲之前我们先看一段程序:

public class Test {
    public static void main(String[] args) {
        System.out.println("return value of getValue(): " +
        getValue());
    }
	public static int getValue() {
         try {
             return 0;
         } finally {
             return 1;
         }
     }
 }

请问答案是:“return value of getValue():0 还是  return value of getValue():1”呢?

在分析此问题之前先看看它们的介绍:

try catch finally 是java中的异常处理的常用标识符,常用的组合为:

1.
try {
    //逻辑代码
   }catch(exception e){
    //异常处理代码
} finally{
    //一定要执行的代码
}

2.
try {
   //逻辑代码
   }catch(exception e){
   //异常处理代码
}

3.
try{
   //逻辑代码
}finally{
   //一定要执行的代码
}

try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 } 

catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 } 

finally { //不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally }

 其实这些都还好理解,主要就是finally中的代码执行顺序的问题,这里给出我的想法:

       正常情况下,先执行try里面的代码,捕获到异常后执行catch中的代码,最后执行finally中代码,但当在try catch中执行到return时,要判断finally中的代码是否执行,如果没有,应先执行finally中代码再返回。

例如某些操作,如关闭数据库等。

为了证实我的猜想,我们来看几个例子:

代码1:

public class Test {
    public static void main(String[] args) {
        System.out.println("return value of getValue(): " +
        getValue());
    }
	public static int getValue() {
         try {
        	 System.out.println("try...");
        	 throw new Exception();
         } catch(Exception e){
        	 System.out.println("catch...");
        	 return 0;
         }finally {
        	 System.out.println("finally...");
             return 1;
         }
     }
 }

 运行结果:

try...
catch...
finally...
return value of getValue(): 1

 代码2:(将return 1 注释)

public class Test {
    public static void main(String[] args) {
        System.out.println("return value of getValue(): " +
        getValue());
    }
	public static int getValue() {
         try {
        	 System.out.println("try...");
        	 throw new Exception();
         } catch(Exception e){
        	 System.out.println("catch...");
        	 return 0;
         }finally {
        	 System.out.println("finally...");
             //return 1;
         }
     }
 }

运行结果:

try...
catch...
finally...
return value of getValue(): 0

意思就是在try 和catch中如果要return,会先去执行finally中的内容再返回

讲到这里,前面题目的答案也就知道了,是“return value of getValue():1”。

当在try中要return的时候,判断是否有finally代码,如果有,先执行finally,所以直接return 1.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147369.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 企业如何制定SOP?

    企业如何制定SOP?企业制定SOP的根本目的是为了提高企业的管理运营能力,使得企业运行效率和运行效果得以改善,从而为企业带来更大的效益,每个企业由于管理模式不同,制定SOP会有所区别。

    2022年5月25日
    107
  • linux设置ip白名单

    linux设置ip白名单白名单操作查看下防火墙的状态:systemctlstatusfirewalld需要开启防火墙systemctlstartfirewalld查看已开放的端口firewall-cmd–zone=public–list-ports添加8484(随便输入四个数字代表端口号)端口到白名单执行firewall-cmd–permanent–zone=public–add-port=8484/tcp重启防火墙:添加成功之后需要重启防火墙

    2022年6月7日
    240
  • YUI 3 Cookbook 中文版

    YUI 3 Cookbook 中文版《YUI3Cookbook》中文版基本信息作者:(美)歌尔(Goer,E.)译者:鲁超伍出版社:电子工业出版社ISBN:9787121196621上架时间:2013-4-7出版日期:2013年4月开本:16开页码:436版次:1-1所属分类:计算机>软件与程序设计>网络编程>javascript更多关于》》》《…

    2022年7月12日
    13
  • javascript 正则表达式测试工具

    javascript 正则表达式测试工具

    2021年8月1日
    56
  • 深究–CSS中px、rem与em的区别

    深究–CSS中px、rem与em的区别前言:随着PC端的网页盛行,移动端作为重要的一部分,也是火热的发展,但是鉴于一些单位的使用,我们并不知道该怎样去使用,那么今天我们来看看常用的三种单位PX、rem与em。目录:一.PX1.概念:2.特点:二.rem一.PX1.概念:px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。PX:px是pixel的缩写,是像素单位也是为影像显示的基本单位,译自英文“pixel”,pix是英语单词picture的常用简写,加上英语单词“元素”element,就得到pixel,

    2022年6月18日
    29
  • android studio下gradle与Git错误解决方法

    android studio下gradle与Git错误解决方法

    2022年1月17日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号