每天几道Java面试题:异常机制(第三天)
目录
- 第三幕、
- 第一场)异常机制面试题
友情提醒
| 背面试题很枯燥,加入一些戏剧场景故事人物来加深记忆。PS:点击文章目录可直接跳转到文章指定位置。 |
第三幕、
第一场)异常机制面试题
【面试官老吉,面试官潘安,面试者老王】
老吉:今天有60场面试,从早上九点,到晚上六点。我们快点开始吧。1.Error、Exception区别
老王:你姓王吗?
①Error类和Exception类的父类都是throwable类
②Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。仅靠程序本身无法恢复和和预防,建议让程序终止。
③Exception类表示程序可以处理的异常,可以捕获且可能恢复。应该尽可能处理,而不应该随意终止异常。
王老吉:反正我不姓加。下一个问题你问吧,潘安。
潘安:程序出了问题还可以抛出异常,国家出了问题又能怎么办呢。西晋惠帝时期的八王之乱导致了五胡乱华,而我也在八王之乱中被杀了。所以:2.说一下Java中的异常处理机制的简单原理和应用。
老王:才三十二岁,你就有白头发了,Java程序员这一行不好干啊。
①异常是指java程序运行时(非编译)所发生的非正常情况或错误。异常处理机制是识别及响应错误的机制。
②Java使用面向对象的方式来处理异常,它把程序中发生的每个异常也都分别封装到一个对象中,该对象中包含有异常的信息,我们也可以自定义异常类(继承Exception或RuntimeException)。所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error(一般不关注)和Exception(合理的应该处理的异常)。
③异常分为运行时异常和编译期异常
编译器强制编译期异常必须try…catch处理或用throws声明继续抛给上层调用方法处理,所以编译期异常也称为checked异常。
④而运行异常可以用try catch抓取也可以不处理,所以编译器不强制用try…catch处理或用throws声明。
潘安:3.常见的异常
老王:ArithmeticException(算术异常)
ClassCastException (类转换异常)
IllegalArgumentException (非法参数异常)
IndexOutOfBoundsException (下标越界异常)
NullPointerException (空指针异常)
老吉:4.说一下异常处理:throw,throws和try…catch…finally
老王:如果异常一直用throw抛出总不是个事情,异常总得有处理的时候这时候需要用到throws和try…catch…finally
/*格式: try{//可能出现异常的代码}catch(异常类型1 对象名){//逻辑代码}catch(异常类型2 对象名){//逻辑代码}*/
public class TestException_3 {public static void main(String[] args) {test2();}public static void test2() {/*运行时异常:数组下标越界异常java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 10*/try {int[] arr = new int[10];System.out.println(arr[10]);} catch (Exception e) { //参数位置可能发生多态 万能捕获器 表现:Exception e = new ArrayIndexOutOfBoundsException();e.printStackTrace(); //打印堆栈信息 ==> 将异常对象所属的类型、原因、涉及的行数打印展示在控制台
// System.out.println(e.getMessage()); //得到异常出现的原因}System.out.println("执行了");}
}
try…catch…finally结构中,finlly被定义在最后位置,将一定需要被执行的代码定义在finally的内部,finally中的代码一定会被执行。
/*格式: try{//可能出现异常的代码}catch(异常类型1 对象名){//逻辑代码}catch(异常类型2 对象名){//逻辑代码}finally{//定义一定需要被执行的代码}*/
public class TestException_3 {public static void main(String[] args) {test4();}public static void test4() {FileInputStream fis = null;try {fis = new FileInputStream("hello2.txt");int len;while ((len = fis.read()) != -1) {System.out.println((char) len);}int num = 10 / 0;} catch (Exception e) {e.printStackTrace();}finally { //这里面的代码一定会执行try {if (fis != null) {fis.close(); }} catch (IOException e) {e.printStackTrace();}}System.out.println("执行了");}
}
异常声明处理:throws(延后处理):一个方法产生了一个它不想立即处理的异常时,那么就需要在该方法的头部使用throws主动声明这个异常,告诉调用者可能出现问题,后面交给外部进行处理,以达到延后处理的目的。如下:m1方法中的异常最终交给了m3方法解决。
/* 关键字:throws 格式:public ... 返回值类型 方法名(形参列表) throws 异常类型1,异常类型2,...,异常类型n{//方法体}*/
public class TestException_4 {public static void main(String[] args) {m3();}public static void m3(){try {m2();} catch (IOException e) {e.printStackTrace();}}public static void m2() throws IOException {m1();}public static void m1() throws IOException {FileInputStream fis = new FileInputStream("hello.txt");int len;while ((len = fis.read()) != -1) {System.out.println((char) len);}fis.close();}
}
throw 关键字用来在程序中明确的抛出异常,什么是抛出异常呢?为了明确指出此方法不捕获这类异常,并且要让调用该方法的其他方法去捕获处理该异常。我们就使用throws明确的抛出(产生)该类异常
/*演示手动抛出异常对象=关键字:throw*/
public class TestException_5 {public static void main(String[] args) {People p = new People("张三", 140);System.out.println(p);//...}
}
//------------------------------分割----------------------------
class People{private String name;private int age;public People() { }public People(String name, int age) {this.name = name;//数据合理性的校验if (age <= 0 || age > 130) {
// System.out.println("年龄不合理..."); //打印信息
// throw new RuntimeException("年龄有误!"); //抛出异常,因为是运行时异常可以处理也可以不处理
// throw new Exception("年龄有误..."); //抛出异常,因为不是运行时异常所以必须处理throw new MyException("年龄有误...");//抛出异常,因为是运行时异常的子类可以处理也可以不处理} else {this.age = age;}}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "People{" +"name='" + name + '\'' +", age=" + age +'}';}
}
潘安:5.final,finally,finalize区别
老王:
①final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
②finally是异常处理语句结构的一部分,表示总是执行。
③finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的finalize方法, finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。例如关闭文件等。JVM不保证此方法总被调用
潘安:今天就面试到这吧,你没通过。去别的公司面试吧。
老王:为什么?
潘安:我们公司以貌取人。
相关文章:
每天几道Java面试题:异常机制(第三天)
目录 第三幕、第一场)异常机制面试题 友情提醒 背面试题很枯燥,加入一些戏剧场景故事人物来加深记忆。PS:点击文章目录可直接跳转到文章指定位置。 第三幕、 第一场)异常机制面试题 【面试官老吉,面试官潘安,面试者…...
Linux 中的 chattr 命令及示例
Linux 中的chattr命令是一个文件系统命令,用于更改目录中文件的属性。该命令的主要用途是使多个文件无法被超级用户以外的用户更改。管理员表示,众所周知,Linux 是一个多用户操作系统,一个用户有可能删除另一个用户非常关心的文件。为了避免这种情况,Linux 提供了“ chatt…...
LeetCode 2605. Form Smallest Number From Two Digit Arrays【数组,哈希表,枚举;位运算】1241
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
VoxWeekly|The Sandbox 生态周报|20230904
欢迎来到由 The Sandbox 发布的《VoxWeekly》。我们会在每周发布,对上一周 The Sandbox 生态系统所发生的事情进行总结。 如果你喜欢我们内容,欢迎与朋友和家人分享。请订阅我们的 Medium 、关注我们的 Twitter,并加入 Discord 社区…...
antd setFieldsValue 设置初始值无效AutoComplete 设置默认值失败
antd form setFieldsValue 设置初始值无效 解决方案 setTimeout(()>{setFieldsValue(values)},100)antd AutoComplete 设置默认值失败 defaultValue 设置无效 解决方案 设置value,搭配onChange来设置修改...
01-Redis核心数据结构与高性能原理
上一篇: 1.Redis安装 下载地址:http://redis.io/download 安装步骤: # 安装gcc yum install gcc# 把下载好的redis-5.0.3.tar.gz放在/usr/local文件夹下,并解压 wget http://download.redis.io/releases/redis-5.0.3.tar.gz…...
预防Dos攻击
Dos----拒绝服务攻击,一般是构造特殊的输入,使得后台的处理耗时远超正常水平,随着请求越来越多,后台服务越发疲于奔命,最后因资源耗尽,无法再接受新的请求,最终造成拒绝服务的效果。 特殊输入例…...
ant design的文档真的是一坨屎
很多基础设置 高傲的写都不写 要自己去index.d.ts里查 这就算了,为什么还有错的。。。。。 即使因为版本号而不同,起码把差异说明一下吧,直接丢个错的什么意思,。。。。。。。。 没点子功夫还真用不了 文档 进度条 Progress -…...
关于迁移学习的一点理解
举个栗子,老虎图片的数量非常少,可以让网络先学会识别猫的图片 1、预训练模型 内容:利用在 ImageNet1000 数据集训练好的模型,将所需的模型参数下载,嵌入到对应的网络架构中,使用对预训练模型的搭建。目前P…...
【力扣周赛】第 361 场周赛(⭐前缀和+哈希表 树上倍增、LCA⭐)
文章目录 竞赛链接Q1:7020. 统计对称整数的数目竞赛时代码——枚举预处理 Q2:8040. 生成特殊数字的最少操作(倒序遍历、贪心)竞赛时代码——检查0、00、25、50、75 Q3:2845. 统计趣味子数组的数目竞赛时代码——前缀和…...
解决 Android 依赖冲突
解决办法 问题原因就是,各个模块所有的依赖(递归)的 jar 包最后都会加载到安卓的项目中,你可以选择 project 形式查看 External Libraries,都在这了。所以解决问题关键就是干掉冲突,剩下一个就行了…...
前端设计模式基础笔记
前端设计模式是指在前端开发中经常使用的一些解决问题的模式或思想。它们是经过实践证明的最佳实践,可以帮助我们更好地组织和管理我们的代码。 一、单例模式(Singleton Pattern) 单例模式是一种创建型模式,它保证一个类只有一个…...
Python项目开发:Flask基于Python的天气数据可视化平台
目录 步骤一:数据获取 步骤二:设置Flask应用程序 步骤三:处理用户输入和数据可视化 步骤四:渲染HTML模板 总结 在这个数字化时代,数据可视化已经成为我们理解和解释信息的重要手段。在这个项目中,我们…...
Dell 服务器常见报错信息汇总
Dell 服务器常见报错汇总 如果有别的报错信息欢迎补充...
算法通关村-----贪心面试大热门之区间问题
判断区间是否重叠 问题描述 给定一个会议时间安排数组intervals,每个会议时间都包括开始时间和结束时间,intervals[i] [starti,endi],请你判断一个人是否能够参加这里面的全部会议。详见leetcode252 问题分析 先将会议安排数组按照开始时间排序&…...
OAK相机:自动或手动设置相机参数
OAK相机:自动或手动设置相机参数 硬件软件 硬件 使用硬件如下: 4✖️ov9782相机OAK-FFC-4P驱动板 硬件接线参考博主的一篇博客:OAK相机:多相机硬件同步拍摄 软件 博主使用的是Ubuntu18.04系统,首先配置所需的pytho…...
百家宴焕新上市,持续深耕100-300元价位段
执笔 | 尼 奥 编辑 | 古利特 4月8日,长江酒道曾在《百家宴谋划“晋级”之路,多措并举切分宴席市场“蛋糕”》一文中提到:“百家宴主力新品即将登场,市场政策灵活焕新。” 如今,百家宴新品及市场新政,正…...
Linux Debian12使用git将本地项目上传到码云(gitee)远程仓库
一、注册码云gitee账号 这个可以参考其他教程,本文不做介绍。 gitee官网:https://gitee.com/ 二、Linux Debian12安装git 如果Linux系统没有安装git,可以使用下面命令安装git sudo apt install git 三、gitee新建仓库 我这只做测试&…...
电子烟行业常用的英文表达
1. 电子烟的各种表达 a) 电子烟 i. Electronic-cigarette, ii. Electronic smoke, iii. electronic cigarettes iv. Electric cigarette, v. E-Cigarettes vi. e-cigarette, vii. e-Cig viii. E cigar,e-cigar 电子烟雪茄 2. 电子烟特指词汇及衍生 a) VAPE i. Vapo…...
【SpringMvc 丨跨域】
Spring MVC 支持跨域处理(CORS)。 CORS 简介处理CORS 过滤器CrossOrigin注解java配置xml配置 主页传送门:📀 传送 简介 跨域是指在浏览器的同源策略下,不能执行其他网站的脚本。它是由浏览器的安全限制造成的…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
