谈谈Java中try-catch-finally中的return语句_java

我们知道return语句用在某一个方法中,一是用于返回函数的执行结果,二是用于返回值为void类型的函数中,仅仅是一个return语句(return ;),此时用于结束方法的执行,也即此return后的语句将不会被执行,当然,这种情况下return语句后不能再有其它的语句了。

在try-catch-finally语句中使用return语句遇到了一些疑问

代码一:

static int intc(){
int x =0;
try{
x=1;
return x;
}finally {
x = 3;
}
}

代码二:在上面那段代码的finally语句中加入了return语句

static int intc(){
int x =0;
try{
x=1;
return x;
}finally {
x = 3;
return x;
}
} 

代码三:

static int intc(){
int x =0;
try{
x=1;
return x;
}finally {
x = 3;
return 0;
}
} 

那么这三个方法的执行结果是多少呢?

代码一:返回1;
代码二:返回3;
代码三:返回0;

其中的原理是怎么回事呢?

  原因是java虚拟机在执行具有返回值的方法时,会在本地变量列表中创建一块区域来存储方法的返回值,在执行返回语句时便会从这个区域中读取值进行返回。

  代码一中在try中将1赋值给变量x,然后将变量x的值复制到存储返回值的区域,最后返回值区域存储的就是1,执行返回语句时便返回一。

  而在代码二中,同样将1赋值给变量x,然后将x的值复制到存储返回值的区域,此时返回值的区域的值为1,然后跳转到finally语句中,此时将3赋值给局部变量x,然后在将x的 值复制到存储返回值的区域,最后执行返回语句,读取到的返回区域中的值就是3.

  代码三中,try中执行的语句是一样的,跳转到了finally语句中后,将3赋值给局部变量,然后将0赋值到存储返回值的区域,最后执行返回语句,读取到的返回区域中的值就是 0,所以就返回0。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索try_catch_return
, try_catch中的return
try_catch_finally
catch return finally、try catch finally、c try catch finally、js try catch finally、oc try catch finally,以便于您获取更多的相关知识。

时间: 2024-11-03 03:11:54

谈谈Java中try-catch-finally中的return语句_java的相关文章

java android-关于java中try catch的问题

问题描述 关于java中try catch的问题 try{}catch(Exception){} 有无可能try中的代码 和catch中的代码都没有执行到.小弟最近做个项目程序中try { ImageModel result = future.get(10, TimeUnit.SECONDS); LogModel entity = new LogModel(); entity.setLog(result.getMs() + result.getStatus()); entity.setCarId

谈谈 Java 中 this 的使用方法_java

1.  this是指当前对象自己.     当在一个类中要明确指出使用对象自己的的变量或函数时就应该加上this引用.如下面这个例子中: 复制代码 代码如下: public class A {   String s = "Hello";      public A(String s) {     System.out.println("s = " + s);     System.out.println("1 -> this.s = " +

Java 在Client/Server 网络中的应用 (转)

client|server|网络 Java 在Client/Server 网络中的应用 (作者: 2000年08月09日 10:19) 随着Java语言的日益流行,特别是Java与Internet Web的密切结合,使它在全球取得了巨大的成功.Java语言以其独立于平台.面向对象.分布式.多线索及完善的安全机制等特色,成为现代信息系统建设中的良好的开发平台和运行环境. 一.Java网络应用模型 和Internet上的许多环境一样,完整的Java应用环境实际上也是一个客户机/服务器环境,更确切地说

Java中finally语句与return语句的执行次序

Java finally语句到底是在return之前还是之后执行? 网上有很多人探讨Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行?很多人都说不是,当然他们的回答是正确的,经过我试验,至少有两种情况下finally语句是不会被执行的: (1)try语句没有被执行到,如在try语句之前就返回了,这样finally语句就不会执行,这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到. (2)在try块中有Sy

java中在使用log4j中的error打印日志时,怎么能捕获到,然后去调用另一个方法。

问题描述 java中在使用log4j中的error打印日志时,怎么能捕获到,然后去调用另一个方法. 使用log4j中的error打印日志时,怎么能捕获到,然后去调用另一个方法. 解决方案 java日志信息 log4j 使用方法java日志信息 log4j 使用方法java日志信息 log4j 使用方法 解决方案二: 一般的error级别的日志都是在异常分支中打印的.你可以直接在catch分支里面调用需要的方法.

java 断开从连接池中获取的连接,规范的操作是怎样的

问题描述 java断开从连接池中获取的连接,规范的操作是怎样的,ResultSet,PreparedStatement,Connection是否需要依次关闭,若需要,应该怎么做才是高效率,规范,而且不会发生内存泄露.涉及到很多try和catch,不知怎么处理. 解决方案 解决方案二:ResultSet,PreparedStatement,Connection是否需要依次关闭需要应该怎么做才是高效率写一个函数用来关闭,如放在的帮助类JdbcUtil里,如publicstaticvoidreleas

Java中jqGrid 学习笔记整理——进阶篇(二)_java

相关阅读: Java中jqGrid 学习笔记整理--进阶篇(一) 本篇开始正式与后台(java语言)进行数据交互,使用的平台为 JDK:java 1.8.0_71 myEclisp 2015 Stable 2.0 Apache Tomcat-8.0.30 Mysql 5.7 Navicat for mysql 11.2.5(mysql数据库管理工具) 一.数据库部分 1.创建数据库 使用Navicat for mysql创建数据库(使用其他工具或直接使用命令行暂不介绍) 2. 2.创建表 双击打

用java实现:在下面xml中添加一本书的信息,用dom4j实现

问题描述 用java实现:在下面xml中添加一本书的信息,用dom4j实现<?xmlversion="1.0"?><library><book><id>b001</id><title>我是一个兵</title><author>大兵</author></book></library> 解决方案 解决方案二:我刚好做过类似的:book.xml文件<?xm

java注解及在butternife中的实践和原理

1.  背景 之前去一个公司,说到了java的注解,问java的注解有几种方式,然后我提到了android中的butternife和afinal注解工具,我们知道butternife在6.1版本的时候还是InjectView,可以到7.1的时候用的却是BInd,这里面有什么区别吗.简单的说,InjectView是在运行的时间进行注解,而BInd在android安装的时候就执行了,肯定后者的执行效率更高些. 接下来说说java的注解吧. 2.  什么是注解 我们有必要对JDK 5.0新增的注解(A