Java中返回值定义为int类型的 方法return 1返回的是int还是Integer&&finally中return问题
在Java中返回值定义为int类型的 方法return 1;中返回的是Integer值,在返回的时候基本类型值1被封装为Integer类型。
定义一个Test类,在异常处理try中和finally中分别return ;
public class Test {
public static void main(String[] args) {
System.out.println(new Test().test());
}
int test() {
try {
return func1();
}finally{
return func2();
}
}
int func1() {
System.out.println("func1");
return 1;
}
int func2() {
System.out.println("func2");
return 2;
}
运行结果:

嗯,没问题,最后执行finally改变return的返回值。下面在看一个:
public class Test {
public static void main(String[] args) {
System.out.println(new Test().test());
}
static int test() {
int x = 1;
try {
return x;
}finally {
++x;
}
}
}
按照上面的逻辑会返回执行结果为2,但结果并不是这样:

这里就要讲到finally对于return的处理:
在finally块中处理返回值,当定义为引用类型时,会先返回try中的返回值,然后执行finally会重置返回值,当定义为基本类型时,不会重置try的返回值。
异常代码加上try语句就标志着运行时会有一个Throwable线程监视该方法的运行,当出现异常时,交由异常逻辑处理,方法在栈内存中运行的,会按照“先进后出”的原则执行,main方法调用异常方法,main方法在下层,异常方法在上层。
当为基本类型时,异常方法执行完毕return x后,此方法的返回值以确定为固定值(基本类型为值拷贝),此后finally代码块修改已经没有意义(类似值传递,可以把finally块看做方法体)当为引用类型时,因为是地址拷贝,所以值会改变。(类似于地址传递)
即当定义为int类型时,return x;是值拷贝,所以finally无法修改x的值。
当为return 1;时,因为结果发生个改变,即返回的是finally中的值,即为地址拷贝,返回的是引用类型,即可确定return 1;此时为return new Integer(1);
即return 1;返回的是Integer对象。
关于finally中return的处理;学习与《编写高质量代码(改善Java程序的151个建议)》书中 第113条建议----不要在finally块中处理返回值;笔记见博客:https://blog.csdn.net/sanhewuyang/article/details/84333062
理解不足之处请大家指正。嗯,愿我们都被温柔以待。^_^
Java中返回值定义为int类型的 方法return 1返回的是int还是Integer&&finally中return问题的更多相关文章
- 创建一个接口Shape,其中有抽象方法area,类Circle 、Rectangle实现area方法计算其面积并返回。又有Star实现Shape的area方法,其返回值是0,Star类另有一返回值boolean型方法isStar;在main方法里创建一个Vector,根据随机数的不同向其中加入Shape的不同子类对象(如是1,生成Circle对象;如是2,生成Rectangle对象;如是3,生成S
题目补充: 创建一个接口Shape,其中有抽象方法area,类Circle .Rectangle实现area方法计算其面积并返回. 又有Star实现Shape的area方法,其返回值是0,Star类另 ...
- Lambda表达式的无参数无返回值的练习和Lambda表达式有参数有返回值的练习
使用Lambda(无参无返回) 说明:给定一个厨师(Cook)接口,内含唯一的抽象方法makeFood,且无参数.无返回值.如下: public interface Cook{ public abst ...
- Java学习笔记13---如何理解“子类重写父类方法时,返回值若为类类型,则必须与父类返回值类型相同或为其子类”
子类重新实现父类的方法称重写:重写时可以修改访问权限修饰符和返回值,方法名和参数类型及个数都不可以修改:仅当返回值为类类型时,重写的方法才可以修改返回值类型,且必须是父类方法返回值的子类:要么就不修改 ...
- Objective-C学习笔记(二十一)——函数的返回值与參数类型
我们在之前的博客中涉及到的函数都没有參数,同一时候返回值也为void,即不须要返回值. 可是在以后的开发中.函数返回值和參数是必须涉及到的. 所以如今我们来讨论这个问题.我们还是以People类为例. ...
- Lambda表达式无参数无返回值的练习和Lambda表达式有参数有返回值的练习
题目: 给定一个厨子Cook接口,内容唯一的抽象方法makeFood,且无参数.无返回值.如下: public interface Cook{ void makeFood(); } 在下面的代碼中,使 ...
- python中函数的定义和详细的使用方法
1. 函数的概念,函数是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集 2. 函数的作用,使用函数可以加强代码的复用性,提高程序编写的效率 3. 函数的使用,函数必须先创建才 ...
- keepalived+mysql主从环境,keepalived返回值是RST,需求解决方法?
环境描述: mysql版本5.6.37 keepalived-1.2.19 系统centos 7:3.10.0-514.26.2.el7 web是:windows server 2 ...
- spring boot 中实现兼容不同的请求类型的方法。
比如一个接口,既想实现请求参数是application/json,又想实现form提交,改怎么做呢?用postman去测试,发现不可能做到两全其美. 我有一个方法,就是不用requestbody,也可 ...
- C#中null值属于什么变量类型
今天学习发现有段代码的输出结果有些理解不了,如图1,输出的结果全部为 false: 图1 后来和同事讨论研究了一下才明白,原来是这样:↓ class Program { static void Mai ...
随机推荐
- Google三驾马车:GFS、MapReduce和Bigtable
谈到分布式系统,就不得不提Google的三驾马车:Google fs[1],Mapreduce[2],Bigtable[3]. 虽然Google没有公布这三个产品的源码,但是他发布了这三个产品的详细设 ...
- SYN2306C型 GPS北斗授时导航接收机
SYN2306C型 GPS北斗授时导航接收机 北斗对时系统北斗标准同步时钟北斗卫星校时器使用说明视频链接: http://www.syn029.com/h-pd-222-0_310_36_-1.htm ...
- DNS之主服务器正向区域部署流程
正向区域:将域名解析为IP 搭建步骤 1)定义区域 2)编写区域解析库文件 3)添加记录 环境介绍 [root@dns ~]# cat /etc/centos-releaseCentOS releas ...
- 快速开发第一个SpringBoot应用
通过笔者这段实践SpringBoot的学习,发现自从使用了SpringBoot后,就再也回不去SpringMVC了,因为相比于SpringMVC,SpringBoot真是太高效率了.下面我们看看它效率 ...
- m3u8解析、转码、下载、合并
m3u8解析.转码.下载.合并 现在网也上大多数视频需要下载都很麻烦,极少数是MP4,大多都是m3u8, 先说视频下载, pc端: 打开网页,点击视频播放,打开开发者工具,找到网络那一栏, 等整个网页 ...
- 并发编程-concurrent指南-Lock
既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述.本文先从synchronized的缺陷讲起,然后再讲述java.util.concurr ...
- android_aidl
好久未更新博客了.人都是这样,刚开始对某一样东东冲劲十足,时间一长,很难坚持下去了,我这博客也是.所以我要打破成规,继续更新. 本次博客谈谈adil的用法.aidl的全称叫什么来着忘了,不过不要紧,重 ...
- WinForm控件之【MaskedTextBox】
基本介绍 掩码文本控件,使用掩码来区分用户输入文本是否正确. 常设置属性 BeepOnError:指示键入无效字符是控件是否发出系统提示音: CutCopyMaskFormat:设置控件文本值复制到剪 ...
- Java文本类型输入与输出
import java.io.*; import java.time.LocalDate; import java.util.Scanner; public class Test { public s ...
- Unable to start services through AMBARI UI
ambari开启nodemanager卡住,后台日志: Mar ::, WARN [ambari-action-scheduler] ActionScheduler: - Exception rece ...