首页 > 编程语言 >[Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?

[Java]面试官:你对异常处理了解多少,例如,finally中可以有return吗?

时间:2024-07-13 11:57:40浏览次数:14  
标签:... 面试官 Java try finally catch return 异常

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://www.cnblogs.com/cnb-yuchen/p/18299911
出自【进步*于辰的博客

参考笔记一,P35.4/5。

目录

1、介绍

相信大家对try...catch...finally都很熟悉了,在此我提一点使用细节。

大家先看这段代码:

try {
    return 0;
} catch (Exception e) {
} finally {
    return 1;
}

请问编译通过吗?如果通过,返回值是多少?

要回答这个问题,需要对异常处理的机制有一个较为全面的了解。如下:

  1. 异常处理不会终止主线程,即不会终止try...catch...finally语句块外代码的执行。
  2. 无论try...catch...中有无return、是否出现异常,finally都会执行,前提是在执行finally前,主线程未终止(PS:寻得一篇博文《finally中的代码一定会执行吗?》(转发),文中列举了许多这种情况)。
  3. try...catch...finally中都有return,前者会被后者覆盖。因为返回值存储于栈,而栈是“先进后出”。

因此,编译通过,返回值为1

注意

  1. try中尽量不要放置太多代码,因为异常处理是线程,“检查性异常”之所以可以实时检查,是因为此线程在自动循环检查。如果代码太多,会占用太多内存,降低程序性能。
  2. 上文说道:“异常处理不会终止主线程”,也就是catch {}处理了异常,即使try {}中出现了异常也不影响主线程(例如int a = 1 / 0手动生成一个异常)。

2、try...with...resources

这是JDK1.7异常处理新特性。

常规写法示例:

try {
    Class clazz = Class.forName("");
    FileReader fr = new FileReader("");
    FileWriter fw = new FileWriter("");
} catch (ClassNotFoundException e) {
    e.printStackTrace();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

新写法:

try(FileReader fr = new FileReader("");
    FileWriter fw = new FileWriter("")) {// ------------A
    Class clazz = Class.forName("");
} catch (ClassNotFoundException | IOException e) {// ---B
    e.printStackTrace();
}

使用条件:

  1. 能够置于A的类必须实现了Closeable接口。
  2. B的异常列表中,每一类异常只能出现一个,且必须是这一类中“最大”的异常。如示例中FileNotFoundException与IOException都属于IO异常,故B中需是IOException或“更大”的异常,而不能是FileNotFoundException。

这一种写法的另一个好处是:程序会自动关闭资源。

最后

暂无言。

本文完结。

标签:...,面试官,Java,try,finally,catch,return,异常
From: https://www.cnblogs.com/cnb-yuchen/p/18299911

相关文章

  • java线程池的一个小坑:shutdown之后线程并不会停止运行
    问题背景最近我想要实现一个这样的功能:在线程运行超过一段时间之后就向主程序抛出一个异常,并停止这个线程。其具体的应用场景是一个任务由多个子任务组成,每个子任务单独一个线程,如果某个子任务长时间未完成就认为这个子任务失败(可能是因为网络原因卡死了),就需要把这个线程结束掉,......
  • JAVA设计模式>>结构型>>适配器模式
    本文介绍23种设计模式中结构型模式的适配器模式目录1. 适配器模式1.1 基本介绍1.2 工作原理 1.3  适配器模式的注意事项和细节1.4  类适配器模式1.4.1 类适配器模式介绍1.4.2 应用实例 1.4.3注意事项和细节1.5 对象适配器模式1.5.1 基本介绍1......
  • 【JavaScript脚本宇宙】创意无限:探索六款热门JavaScript图形库的魅力
    探索JavaScript图形库:深入了解网络操作和数据可视化工具前言在当今数字化时代,数据可视化和网络分析变得愈发重要。JavaScript图形库的出现为开发人员提供了丰富的工具和资源,帮助他们更轻松地创建复杂的网络图形和数据可视化效果。本文将介绍几个流行的JavaScript图形库,包......
  • 基于java+springboot+vue实现的作业管理系统(文末源码+Lw)110
    基于SpringBoot+Vue的实现的作业管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包)功能描述:作业管理系统有管理员,教师,学生三个角色。教师和学生都可以进行注册然后再登录。学生可以修改自己的密码,查看和下载作业信息,并且可以提交自己写好的作业,并且可以......
  • 基于java+springboot+vue实现的新闻稿件管理系统(文末源码+Lw)109
     基于SpringBoot+Vue的实现的新闻稿件管理系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包)系统功能:新闻稿件管理系统管理员功能有个人中心,用户管理,记者管理,审批员管理,新闻分类管理,新闻信息管理,系统管理等。记者发布新闻信息,审批员进行审核,用户进行查看。因......
  • 基于java+springboot+vue实现的在线试题库系统(文末源码+Lw)108
     基于SpringBoot+Vue的实现的在线试题库系统(源码+数据库+万字Lun文+流程图+ER图+结构图+演示视频+软件包) 系统功能:精品在线试题库系统有管理员,教师,学生三个角色。管理员功能有个人中心,专业管理,学生管理,教师管理,试卷管理,试题管理,考试管理。教师可以管理试题和试卷,查看学生......
  • JavaScript(9) ----this指向问题,bind,call,apply等方法
    目录this指向问题全局函数调用:对象方法调用:构造函数调用:事件处理:箭头函数:setTimeout和setInterval7.使用call、apply或bindcall方法apply方法bind方法总结this指向问题全局函数调用:在全局作用域中调用函数时,this指向全局对象(浏览器中是window对象)。fun......
  • Java简单学生信息管理系统
    importjava.io.;importjava.nio.file.;importjava.util.;importjava.util.stream.;classStudent{  privateStringid;  privateStringname;  privateintage;  privateStringaddress;publicStudent(Stringid,Stringname,intag......
  • 基于微信小程序的海鲜预订系统(后端JavaSSM+MySQL)
    目录摘要IAbstractII目录III第1章绪论11.1研究背景及意义11.1.1选题背景11.1.2选题意义11.2国内外研究现状及发展趋势21.2.1国外研究现状21.2.2国内研究现状21.2.3发展趋势31.3研究的主要内容3第2章系统技术52.1Java语言52.1.1......
  • Java基础之——final关键字的使用
    #Java基础复习##参考文章:Java:final关键字的作用(方法、变量、类)_java语言中在类定义时使用final关键字修饰是指这个类-CSDN博客#一、理解含义final是Java中一个保留的关键字,可以用于修饰变量、方法和类。任何实体(变量,方法或类)一旦被声明final后,只能分配(赋值)一次。也就是......