Hi,我是Mic

今天给大家分享一道阿里一面的面试题。

这道题目比较基础,但是确难倒了很多人。

关于”受检异常和非受检异常的理解“

我们来看看普通人和高手的回答。

普通人:

嗯。。。。。。。

运行异常不需要捕获的其他异常是需要强制捕获的,像一些IO异常。

高手:

好的。

所谓的受检异常,表示在编译的时候强制检查的异常,这种异常需要显示的通过try/catch来捕捉,或者通过throws抛出去,否则从程序无法通过编译。

而非受检异常,表示在编译器可以不需要强制检查的异常,这种异常不需要显示去捕捉。

在Java里面,所有的异常都是继承自java.lang.Throwable类,Throwable有两个直接子类,Error和Exception。

Error用来表示程序底层或者硬件有关的错误,这种错误和程序本身无关,比如常见的OOM异常。这种异常和程序本身无关,所以不需要检查,属于非受检异常。

Exception表示程序中的异常,可能是由于程序不严谨导致的,比如NullPointerException。

Exception下面派生了RuntimeException和其他异常,其中RuntimeException运行时异常,也是属于非受检异常。

所以,除了Error和RuntimeException及派生类以外,其他异常都是属于受检异常,比如IOException、SQLException。

之所以在Java中要设计一些强制检查的异常,我认为主要原因是考虑到程序的正确性、稳定性和可靠性。

比如数据库异常、文件读取异常,这些异常是程序无法提前预料到的,但是一旦出现问题,就会造成资源被占用导致程序出现问题。

所以这些异常我们需要主动捕获,一旦出现问题,我们可以做出相应的处理,比如关闭数据库连接、文件流的释放等。

以上就是我对这个问题的理解!

总结

这个问题并不难,但是在实际工作中,如何用好异常又显得很重要。

从高手的回答中可以明显看到他对异常的理解层次是比较深的,分别介绍了受检和非受检异常,

以及在Java中这两种异常是如何分类,最后说明了这两种异常的价值。

喜欢我的作品的小伙伴记得点赞和收藏加关注。

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Mic带你学架构

如果本篇文章对您有帮助,还请帮忙点个关注和赞,您的坚持是我不断创作的动力。欢迎关注「跟着Mic学架构」公众号公众号获取更多技术干货!

【Java面试】请简单说一下你对受检异常和非受检异常的理解的更多相关文章

  1. JAVA可检测异常和非检测异常

    Java的可检测异常和非检测异常泾渭分明.可检测异常经编译器验证,对于声明抛出异常的任何方法,编译器将强制执行处理或声明规则. 非检测异常不遵循处理或声明规则.在产生此类异常时,不一定非要采取任何适当 ...

  2. Java检查异常、非检查异常、运行时异常、非运行时异常的区别

    Java把所有的非正常情况分为两种:异常(Exception)和错误(Error),它们都继承Throwable父类. Java的异常(Exception和Error)分为检查异常和非检查的异常. 其 ...

  3. JAVA受检异常和非受检异常举例

    受检异常和非受检异常(运行时异常)举例 RuntimeException(即非受检异常): RuntimeException在默认情况下会得到自动处理,所以通常用不着捕获RuntimeExceptio ...

  4. 【Java面试】简单说一下你对序列化和反序列化的理解

    Hi,大家好,我是Mic 一个工作4年的粉丝,投了很多简历 好不容易接到一个互联网公司的面试邀约. 在面试第一轮就被干掉了,原因是对主流互联网技术理解太浅了. 其中就有一个这样的问题:"简单 ...

  5. java 检查异常 和 非检查异常

    个人见解 ,如果有问题 ,还希望大神们 指正 1. 非检查异常 又称运行时 异常 ,所有 继承自 RuntimeException 的异常都是 非检查异常  ,, 如果你不处理  会有 虚拟机 mai ...

  6. Java检查异常和非检查异常,运行时异常和非运行时异常的区别

    通常,Java的异常(包括Exception和Error)分为检查异常(checked exceptions)和非检查的异常(unchecked exceptions).其中根据Exception异常 ...

  7. Java 面试知识点【背诵版 240题 约7w字】

    -- 转载自牛客网 是瑶瑶公主吖 Java 基础 40 语言特性 12 Q1:Java 语言的优点? ① 平台无关性,摆脱硬件束缚,"一次编写,到处运行". ② 相对安全的内存管理 ...

  8. 关于java中为什么尽量把受检异常转化为非受检异常

    首先理解一下受检异常与非受检异常: 异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机操作中可能遇到的异常,是一种常见的运行错误,只要程序设计的没有问题通常就不会发生.受检异常与程序的上 ...

  9. Java中会存在内存泄露吗?请简单描述。

    本文转载自:Java中会存在内存泄漏吗,请简单描述 会.java导致内存泄露的原因很明确:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周 ...

随机推荐

  1. Vue整合axios 插件方式

    1 创建一个vue的项目 使用命令 vue create axios-vue 创建,可以什么都不用勾选 2 安装axios npm install axios --save 如果安装过程很慢的话,也可 ...

  2. MySQL---增删改查数据库、表、记录

    对库的操作 # 增 create database db1 charset utf8; # 删 drop database db1; # 改 alter database db1 charget gb ...

  3. 序列化和反序列化为什么要实现Serializable接口?(史上最全、简单易懂)

    目录结 前言 1.什么是序列化和反序列化 2.什么时候需要进行序列化和反序列化 2.1.服务器和浏览器交互时用到了Serializable接口吗? 2.2.Mybatis将数据持久化到数据库中用到了S ...

  4. 安卓记账本开发学习day1

    学习了一些简单的布局与界面设计

  5. python基础练习题(题目 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身)

    day8 --------------------------------------------------------------- 实例013:所有水仙花数 题目 打印出所有的"水仙花 ...

  6. 国产化之银河麒麟.netcore3.1访问https服务的两个问题

    背景 某个项目需要实现基础软件全部国产化,其中操作系统指定银河麒麟,数据库使用达梦V8,CPU平台的范围包括x64.龙芯.飞腾.鲲鹏等. 考虑到这些基础产品对.NETCore的支持,最终选择了3.1版 ...

  7. 《手写Mybatis》第5章:数据源的解析、创建和使用

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 管你吃几碗粉,有流量就行! 现在我们每天所接收的信息量越来越多,但很多的个人却没有多 ...

  8. Gson解析:java.lang.IllegalArgumentException: declares multiple JSON fields named status 问题的解决

    在一次写定义系统统一返回值的情况下,碰到了java.lang.IllegalArgumentException: declares multiple JSON fields named status这 ...

  9. 基础学习:MYSQL命令大全(持续更新中---最近一次:2019.12.6)

    启动mysql : mysql -hlocalhost -uroot -p创建数据库:create database 数据库名字;指定要操作的数据库:use 数===据库名字;查看数据表建表语句:sh ...

  10. 研讨会回放视频:如何提升Jenkins能力,使其成为真正的DevOps平台

    "如何实现集中管理.灵活高效的CI/CD"在线研讨会精彩分享 演讲嘉宾:杨海涛 在2022年3月29日举办的"如何实现集中管理.灵活高效的CI/CD"在线研讨会 ...