try catch finally 执行顺序面试题总结

执行顺序

今天牛客网遇到这个题目,做对了,但是下面的评论却很值得看看

public class TestTry {

    public int add(int a, int b){
try {
return a + b;
} catch (Exception e) {
System.out.println("catch语句");
} finally {
System.out.println("finally语句");
} return 0;
}
public static void main(String[] args) {
TestTry testTry = new TestTry();
System.out.println(testTry.add(14, 15));
}
}

这个题目答案是

finally语句
29

那么为什么是这样呢?

程序执行到try{}语句中的return方法时,它会干这么一件事,将要返回的结果存储到一个临时栈中,然后程序不会立即返回,而是去执行finally{}中的程序,等finally{}执行完成之后再返回

下面这个

public class Test02 {

    public int add(int a){
try {
a ++;
System.out.println("try a = " + a);
return a;
} catch (Exception e) {
a ++;
System.out.println("catch a = " + a);
return a;
} finally {
a = 10;
System.out.println("finally a = " + a);
}
}
public static void main(String[] args) {
Test02 test02 = new Test02();
System.out.println(test02.add(0));
}
}

结果为

try a = 1
finally a = 10
1

下面这个

public class Test03 {

    public int add(int a){
try {
a ++;
System.out.println("try a = " + a);
return a;
} catch (Exception e) {
a ++;
System.out.println("catch a = " + a);
return a;
} finally {
a = 10;
System.out.println("finally a = " + a);
return a;
}
}
public static void main(String[] args) {
Test03 test03 = new Test03();
System.out.println(test03.add(0));
} }

可以看到,是从finally语句块中返回的

try a = 1
finally a = 10
10

下面这个有异常的情况下

public class Test04 {
public int add(int a){
try {
a ++;
int m = a / 0;
System.out.println("try a = " + a);
return a;
} catch (Exception e) {
a ++;
System.out.println("catch a = " + a);
return a;
} finally {
a = 10;
System.out.println("finally a = " + a);
return a;
}
} public static void main(String[] args) {
Test04 test04 = new Test04();
System.out.println(test04.add(0));
}
}

catch a = 2
finally a = 10
10

可以看到,因为finally中有return语句,try、catch中的异常被消化掉了,屏蔽了异常的发生,这与初期使用try、catch的初衷是相违背的

try-catch-finally面试题的更多相关文章

  1. 今天在2cto网站看到一个有关try{}catch(){}finally{}语句中含有return的讲解,理解很透彻。

    publicclassTrycatchTest{ publicstaticvoidmain(String[]args){ System.out.println("x:"+newTr ...

  2. [c#基础]关于try...catch最常见的笔试题

    引言 在翻看之前总结的常见面试题中,关于try...catch异常处理的还是蛮多了,今天看到这个面试题,也就重新学习一下. try..catch语法 try-catch语句由一个try块后跟一个或多个 ...

  3. try catch finally 执行顺序面试题总结

    在网上看到一些异常处理的面试题,试着总结一下,先看下面代码,把这个方法在main中进行调用打印返回结果,看看结果输出什么. public static int testBasic(){ int i = ...

  4. 【Java面试题】22 JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

    throws是获取异常throw是抛出异常try是将会发生异常的语句括起来,从而进行异常的处理,catch是如果有异常就会执行他里面的语句,而finally不论是否有异常都会进行执行的语句. thro ...

  5. 面试题:try,catch,finally都有return语句时执行哪个 已看1

    1.不管有木有出现异常,finally块中代码都会执行: return 先执行 把值临时存储起来, 执行完finally之后再取出来 值是不会改变的2.当try和catch中有return时,fina ...

  6. JAVA面试题

    在这里我将收录我面试过程中遇到的一些好玩的面试题目 第一个面试题:ABC问题,有三个线程,工作的内容分别是打印出"A""B""C",需要做的 ...

  7. .NET面试题系列[4] - C# 基础知识(2)

    2 类型转换 面试出现频率:主要考察装箱和拆箱.对于有笔试题的场合也可能会考一些基本的类型转换是否合法. 重要程度:10/10 CLR最重要的特性之一就是类型安全性.在运行时,CLR总是知道一个对象是 ...

  8. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  9. selenium 常见面试题以及答案(Java版)

    1.怎么 判断元素是否存在? 判断元素是否存在和是否出现不同, 判断是否存在意味着如果这个元素压根就不存在, 就会抛出NoSuchElementException 这样就可以使用try catch,如 ...

  10. 前端试题本(Javascript篇)

    JS1. 下面这个JS程序的输出是什么:JS2.下面的JS程序输出是什么:JS3.页面有一个按钮button id为 button1,通过原生的js如何禁用?JS4.页面有一个按钮button id为 ...

随机推荐

  1. aes加解密后续问题contentType不是application/json时候后台解析请求对象request

    一.post请求的三种content-type 1.application/x-www-form-urlencoded 主要用于如下:1.1: 最常见的POST提交数据方式.1.2:原生form默认的 ...

  2. MySQL查询结果集字符串操作之多行合并与单行分割

    前言 我们在做项目写sql语句的时候,是否会遇到这样的场景,就是需要把查询出来的多列,按照字符串分割合并成一列显示,或者把存在数据库里面用逗号分隔的一列,查询分成多列呢,常见场景有,文章标签,需要吧查 ...

  3. 343 day08File类、递归

    day08[File类.递归] 主要内容 File类 递归 教学目标 [ ] 能够说出File对象的创建方式 [ ] 能够说出File类获取名称的方法名称 [ ] 能够说出File类获取绝对路径的方法 ...

  4. Django学习day07随堂笔记

    今日考题 """ 今日考题 1.必知必会N条都有哪些,每个都是干啥使的 2.简述神奇的双下划线查询都有哪些方法,作用是什么 3.针对多对多外键字段的增删改查方法有哪些,各 ...

  5. PHP中比较数组的时候发生了什么?

    首先还是从代码来看,我们通过比较运算符号来对两个数组进行比较: var_dump([1, 2] == [2, 1]); // false var_dump([1, 2, 3] > [3, 2, ...

  6. symfony2中mysql和mongodb的增删改查总结

    https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/data-retrieval-and-manip ...

  7. 深入浅出WPF-02.WPF系列目录

    WPF系列目录 2. XAML认识 3. XAML语法 4. x名称空间详解 5. 控件与布局 6. 绑定Binding-01 6. 绑定Binding-02 6. 绑定Binding-03 7. 属 ...

  8. State Space Model Content

    State Space Model 状态空间模型及其卡尔曼滤波技术 混合正态分布下的状态空间模型及其滤波

  9. shiro的使用与JWT整合

    一.shiro入门 两大框架对比:安全框架Shiro和SpringSecurity的比较 了解shiro 什么是Shiro Apache Shiro是一个Java的安全(权限)框架.| Shiro可以 ...

  10. HTML常用的css属性(及其简写)

    这篇文章主要介绍几个常用css属性和简写 本文目录: 1.背景属性 2.边框属性 3.字体属性 4.外边距 5.填充 6.颜色 1.background[背景属性] background-color ...