一道简单到爆 Java面试题,居然挂了一票人
很多时候bug往往都是出在,我们觉得非常简单,不起眼的基础知识上
年前公司最后一波招人,为年后项目做技术储备,主要招聘对象初中级Java开发,要求也并没有多苛刻,唯一一点基础稍好,快速上手做项目就行。在网上搜了几个比较简单的面试题,结果一票应聘者答的惨不忍睹,其中不乏工作6年以上的老猿。
直接来看一下题目,就是在try catch finally中放入return ,来看返回的顺序,这个在日常的代码编写中应该是很常用的了吧?不算是面试造航母~
大概考察了几种情况:
一下 i 初始值都是 0

1、catch中有return,finally中的代码会执行吗?

结果很明显会执行:

2、catch中有return,finally也有return,怎么执行?

结果显示finally中的return会比catch中return先执行

前边两个一般问题都不大,接着往下看
3、catch中return变量,finally对变量做计算,返回结果是啥?

按照往常的逻辑,输入0 ,经过++i,返回1没毛病呀!

fuck! 咋是0?
i 赋初值为0,捕获到异常后进入 catch,catch 里有return,但是后边还有 finally,先执行 finally里的,对i+1=1,然后 return。那 return 的是1?事实上不是1,而是0.为何?

可以清楚的看到i=1;但是返回的确是0?那说明此i非彼i,就是返回的i不是这个i。
因为这里是值传递,在执行return前,保留了一个i的副本,值为0,然后再去执行finally,finall完后,到return的时候,返回的并不是当前的i,而是保留的那个副本,也就是0.所以返回结果是0.
4、 catch、finally同时return变量,返回结果又该是啥?

如果finally中有return不会走catch

总结:
在
catch中有return的情况下,finally中的内容还是会执行,并且是先执行finally再return。需要注意的是,如果返回的是一个基本数据类型,则
finally中的内容对返回的值没有影响。因为返回的是finally执行之前生成的一个副本。当
catch和finally都有return时,return的是finally的值。
水文一篇没什么含金量,一点基础知识总结,希望对你们有用
WeChat:关注公众号【程序员内点事】,专注于开发技术的研究与知识分享,免费获取2000G技术、面试资料。
一道简单到爆 Java面试题,居然挂了一票人的更多相关文章
- 一道非常棘手的 Java 面试题:i++ 是线程安全的吗
转载自 一道非常棘手的 Java 面试题:i++ 是线程安全的吗 i++ 是线程安全的吗? 相信很多中高级的 Java 面试者都遇到过这个问题,很多对这个不是很清楚的肯定是一脸蒙逼.内心肯定还在质疑 ...
- 一道简单的 Java 笔试题,但值得很多人反思!
前言 面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问什么深入的技术问题,只问一些广泛的.基础的.我只要 ...
- 集合中存的是引用,分析一道容易混淆的Java面试题
我们自定义的类是以引用的形式放入集合,如果使用不当,会引发非常隐蔽的错误.就拿我经常问到的一个面试题来说明这个知识点. 第一步,我们定义一个Car类型的类,其中只有一个int类型id属性. 第二步,创 ...
- 一道简单的for循环面试题(数字龙形排序)
本道题是我从网上见到的,因为是一道很久没做的循环题,自己的思路也是陷入了一些思维陷阱中,后来经过把大脑放空,重新看这道题后,思路立马就出来了. 题目就是完成如下图所示的效果: 我一开始是想着将它按照奇 ...
- 一道月薪3W的java面试题 (小明和小强都是张老师的学生,张老师的生日是某月某日,2人都不知道张老师的生日)
小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日 是下列10组中的一天,张老师把M值告诉了小明,把N值告诉了小强,张老师问他们知道他的生日是那一天吗? 3月4日 3月5日 3 ...
- 关于一道简单的Java 基础面试题的剖析: short s1=1;s1 = s1 +1会报错吗?
package common; public class ShortTypeTest { /* * @param args */ public static void main(String[] ar ...
- 一道简单的面试题,难倒各大 Java 高手!
Java技术栈 www.javastack.cn 优秀的Java技术公众号 最近栈长在我们的<Java技术栈知识星球>上分享的一道 Java 实战面试题,很有意思,现在拿出来和大家分享下, ...
- 收集了50道基础的java面试题
下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错误的,修改后的Java面试题集参照了JDK最 ...
- java面试题系列11
华为的JAVA面试题 QUESTION NO: 1 publicclass Test1 { publicstaticvoid changeStr(String str){ ...
随机推荐
- 21个项目玩转深度学习:基于TensorFlow的实践详解03—打造自己的图像识别模型
书籍源码:https://github.com/hzy46/Deep-Learning-21-Examples CNN的发展已经很多了,ImageNet引发的一系列方法,LeNet,GoogLeNet ...
- H3C配置Header进入用户视图的提示信息--系统视图
incoming:登录终端用户界面时的提示信息. Header 3种类型 login:登录验证时的提示信息. Vty模式 ...
- 【t056】智力问答(链表+计数排序做法)
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 新年联欢会上,G.Sha负责组织智力问答节目.G.Sha建立了一个很大很大的超级题库,并衡量了每道题的 ...
- gradle 打包后第三方登录不上
使用 gradlew clean assembleReleaseChannels 生成不用的渠道包后 第三方登录不上 原因:打包未设置好APP的 .keystore
- PostgreSQL 遇到 column "value" does not exist
初次使用PostgreSQL,在执行插入语句的时候死活插入不进去数据 INSERT INTO pre_trait ( archive_id, apply_from, owner_area_code ) ...
- 浅解 go 语言的 interface(许的博客)
我写了一个 go interface 相关的代码转换为 C 代码的样例.也许有助于大家理解 go 的 interface.不过请注意一点,这里没有完整解析 go 语言 interface 的所有细节. ...
- lamda表达式和尾置返回类型
基本lambda语法 基本形式如下: [capture](parameters) mutable ->return-type {body} [capture]:叫做捕获说明符,表示一个lambd ...
- docker 挂载目录挂载不上**
最近做项目做一个shared Dynamodb, 使用docker挂载一个image,发现怎么都挂载不上, 使用 $ pwd E:\Work\Aws\git\schema\dynamodb\local ...
- ssh 简写
<< remotessh remotessh 这一对之间,可以写多个命令,换行即可. 否者就简单的 双引号,里面每个命令用分号隔开. 注意: 在远程服务器上的执行权限. 注意:login密 ...
- Java面向对象程序设计第8章3-5
Java面向对象程序设计第8章3-5 3.String类型有什么特点? 一旦赋值,便不能更改其指向的字符对象 如果更改,则会指向一个新的字符对象 不能为null 4.String什么时候进行值比较,什 ...