java趣味_Java趣味分享:try & finally

本文通过四个测试方法展示了Java异常处理中的return语句与finally块的执行顺序和影响。无论是否发生异常,finally块总会执行。在try中return的结果会被保存,即使finally中修改了变量,返回值仍以try中的为准,但对于引用类型,finally中修改的属性会反映在返回的对象上。如果try/finally都包含return,最终返回finally的return值。
摘要由CSDN通过智能技术生成

format,png

考虑以下四个测试方法,它们会输出什么?

public class Test {

public static void main(String\[\] args) {

System.out.println(test1());

System.out.println(test2());

System.out.println(test3());

System.out.println(test4());

}

private static int test1() {

int i = 1;

try {

return i;

} catch (Exception e) {

e.printStackTrace();

} finally {

i = 0;

}

return i;

}

private static int test2() {

int i = 1;

try {

return i;

} catch (Exception e) {

e.printStackTrace();

} finally {

i = 0;

return i;

}

}

private static User test3() {

User user = new User("u1");

try {

return user;

} catch (Exception e) {

e.printStackTrace();

} finally {

user = new User("u2");

}

return null;

}

private static User test4() {

User user = new User("u1");

try {

return user;

} catch (Exception e) {

e.printStackTrace();

} finally {

user.setName("u2");

}

return null;

}

}

public class User {

public User(String name) {

this.name = name;

}

private String name;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return name;

}

}

答案如下:

1

0

u1

u2

结论

1、不管try,finally都会执行;

2、在try中return,在finally执行前会把结果保存起来,即使在finally中有修改也以try中保存的值为准,但如果是引用类型,修改的属性会以finally修改后的为准;

3、如果try/finally都有return,直接返回finally中的return。

推荐去我的博客阅读更多:

觉得不错,别忘了点赞+转发哦!

课程介绍:全套课程由V哥,Mask、强哥、索尔四位老师共同打造,目标是为Java初学者献上一份豪华大餐,全套课程共计23章,通过一套课程,即可0基础入门Java并建立深厚的基本功。这套课程我们使用JDK21,梳理大纲,做思维导图,整理很多资料大家开会的时候会把大纲的每个细则商讨好久,我相信我们这版课程是已经非常细致了。其实比较难的还是后面做PPT,因为课程为了让同学更好的吸收,我们的原则是:“有趣” “有料” “有用”,所以我们要想很多有趣的例子,要在PPT中举一些比较有趣并且和知识点相关的案例,能够让大家有兴趣。课程亮点:设计本套课程时团队从课程设计、录制形式、课程深度、讲授方式、案例设计、逻辑结构等方面分析了全网大量现在有Java教程,从为什么学,怎么学,学到什么程度入手,最终呈现出这套前无古人,后也会很难有来者的全套Java教程。课程有八大亮点:1、场景化趣味小短剧为你强化带入感2、全套课程基于全新的JDK21 LTS版,IDEA全程陪伴,MAC用户、Windows用户无障碍学习。3、课程内容设计全面、细致、深入,适合小白,同样适合需要提升Java基本功的小伙伴。4、除了课程案例代码练习,课程中额外设计了200+个练习与作业,提升学习者的代码量,必竟学习Java,大量的练习才能孰能生巧,正所谓键盘敲烂,月薪过万。5、知识点以了解、重点、难点划分,重点和难点刨根问底、扒掉裤衩式讲解,让你即哇塞又满足!6、知识点涵盖大量面试题,让你在学习知识的同时,为面试提前做好充足的准备。7、两大完整的项目实战开发,让你学会把知识融会贯通,体验项目开发的成就感。8、课程视觉效果绝对让你眼前一亮,丰富的动画与剪辑效果,让你体验德芙般纵享丝滑,妈妈再也不用担心我的学习。另外,我们在课程中设计了大量的搞笑、有趣的段子、案例和生活化的场景,除了提升课程趣味性。学完掌握什么1、对计算机和Java有一定了解。2、能够搭建java编程的环境,并能够使用开发开发工具。3、掌握java的基本语法及各种分支嵌套循环结构。4、掌握方法定义及一维数组二维数组的应用。5、理解面向对象编程及面向对象的三大特征。6、能够定义接口抽象类使用内部类并掌握部分设计模式。7、掌握java提供的常用类Object String包装类BigDeimal Date等等。8、掌握集合的应用方法,熟练使用集合的应用,并能够用集合解决问题。9、理解泛型,会使用泛型,能够使用通配符。10、理解异常及异常的结构,能够用多种方式处理异常并定义自定义异常。11、掌握IO流的作用,在不同的场景下使用不同的IO流12、掌握多线程的作用及好处,能够使用多线程提高代码性能并解决多线程使用过程中碰到的问题。13、理解网络编程的作用,掌握网络编程的三大要素,熟练应用网络编程。14、理解反射的原理,并数量掌握常用的类及方法,为学习框架打好基础。15、理解正则表达式,理解定义的规则及应用场景。16、掌握枚举的作用及枚举的特点,理解枚举的应用场景。17、理解注解的作用及注解的应用,掌握元注解的作用及特点。18、掌 握JDK8的 新 特 性Lamdba表 达 式 函 数 式 接 口Stream流 等,理 解JDK9,JDK10,JDK11,JDK14,JDK15 ,JDK16 JDK17, JDK18,JDK19 ,JDK21的新特性。19、理解项目的设计过程,项目的构建过程,项目的环境搭建,项目的功能实现,能自己动手实现一个项目的完整功能。20、理解JVM的内存结构,并了解JVM的垃圾回收算法及垃圾回收器的特点及运行原理。21、掌握同步工具,能够使用并发工具,分析并解决并发相关问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值