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/147367.html原文链接:https://javaforall.net

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


相关推荐

  • linux定时执行sql文件[通俗易懂]

    linux定时执行sql文件[通俗易懂]linux定时执行sql文件

    2022年4月24日
    98
  • 数据仓库之电商数仓– 3.1、电商数据仓库系统(ODS层、DIM层、DWD层)

    数据仓库之电商数仓– 3.1、电商数据仓库系统(ODS层、DIM层、DWD层)目录一、数仓分层1.1为什么要分层1.2数据集市与数据仓库概念1.3数仓命名规范1.3.1表命名1.3.2脚本命名1.3.3表字段类型二、数仓理论2.1范式理论2.1.1范式概念2.1.2函数依赖2.1.3三范式区分2.2关系建模与维度建模2.2.1关系建模2.2.2维度建模⭐️2.3维度表和事实表⭐️2.3.1维度表2.3.2事实表2.4维度模型分类2.5数据仓库建模⭐️????2.5.1ODS层2.5.2DIM层和DWD层2.5.3DWS层与DWT层2.5.4

    2022年6月26日
    27
  • jvm垃圾回收详解_java 垃圾回收器

    jvm垃圾回收详解_java 垃圾回收器JVM垃圾回收1.概述JVM会自动帮程序员进行垃圾回收,并不需要程序员手动的进行垃圾回收(C++等语言需要自己手动回收垃圾),了解JVM的垃圾回收,可以帮程序员写出占用内存更小、更高效的程序。1.1什么是垃圾?垃圾是指运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。1.2什么区域需要进行垃圾回收JVM的内存结构包括五大区域:程序计数器、虚拟机栈、本地方法栈、堆区、方法区。其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生、随线程而灭,因此这几个区域的内存分配和回

    2022年9月12日
    2
  • 富集分析集锦(KEGG富集分析图)

    链接:https://www.jianshu.com/p/988d90484f77不管是转录组,还是芯片数据,或者其他有关基因的组学分析,每当数据分析到后面,要想得到结果,都躲不过这个富集分析,因为它是帮助我们从庞杂的组学数据中发掘规律重要的一环,对基因功能进行富集分析,就有可能发现在生物学过程中起关键作用的生物通路,并且帮助理解生物学过程的分子机制。现在的高通量测序带来的巨大数据量,让我们眼…

    2022年4月15日
    562
  • 数据库基础知识(MySQL入门)

    数据库基础知识(MySQL入门)数据库基础知识(MySQL入门)文章目录数据库基础知识(MySQL入门)一.基本概念二.特点一.基本概念Information,信息是对客观世界中各种事物的运动状态和变化的反映,是数据的含义。Data,数据用来记录信息的可识别符号,是信息的具体表现形式,是信息的载体。DB(DataBase)数据库,用来存储数据的仓库,保存了一系列有组织的数据。DBA(DateBaseAdministrator)数据库管理员,负责管理和操作数据库。DBAP(DataBaseApplicationP

    2022年8月20日
    8
  • JSP request对象、response对象、contentType属性,HTTP状态码

    JSP request对象、response对象、contentType属性,HTTP状态码JSP引擎的内置request对象获取客户提交信息:1.request.getProtocol(); 获取客户向服务器提交信息所使用的通信协议,比如:http/1.12.request.getServletPath();获取客户请求的JSP页面文件的目录。3.request.getContentLength();获取客户提交的整个信息的长度。4.request.getMeth

    2022年7月19日
    14

发表回复

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

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