【面试八股文】每日一题:谈谈你对异常的理解

这篇具有很好参考价值的文章主要介绍了【面试八股文】每日一题:谈谈你对异常的理解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

每日一题-Java核心-谈谈你对异常的理解【面试八股文】

  异常是程序在运行过程中出现的错误或不正常的情况。当程序执行过程中遇到无法处理的错误或者不符合预期的情况,就会抛出异常。异常可以分为两种类型:受检异常非受检异常

  受检异常是指在程序编译过程中就能被检测到的异常,需要在代码中进行明确的处理,否则编译不通过。例如,文件不存在、网络连接失败等情况都属于受检异常。

  非受检异常是指在程序运行过程中出现的异常,无法在编译时被检测到。这些异常通常是由程序逻辑错误导致的,如空指针引用、数组越界等。非受检异常可以通过捕获和处理来避免程序的崩溃。

  异常处理是为了在程序出现异常时能够进行相应的处理,避免程序的异常终止。常用的异常处理方式包括捕获异常、抛出异常和处理异常。捕获异常通过try-catch语句块来实现,可以在catch块中对异常进行处理,如输出错误信息、记录日志等。抛出异常通过throw语句将异常传递给上层调用者来处理。处理异常可以通过finally块来执行一些无论是否发生异常都需要执行的代码。

  异常处理目的保证程序稳定性可靠性。良好的异常处理可以提高程序的健壮性,增强程序的容错性,并能够更好地定位和解决问题。同时,合理的异常处理也能提高程序的可读性和可维护性。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u1HQ9693-1691657117410)(E:\课程更新录制\08-面试专题\01-课件资料\img\Java异常.png)]

return和finally的顺序问题

  分析如下的代码程序,给出输出结果,并给出原因

public class Demo02 {
    public static void main(String[] args) {
        Demo02 demo02 = new Demo02();
        System.out.println(demo02.getName("bobo"));
    }

    public String getName(String name){
        String res = "";
        try {
            res = name;
            return  res;
        }finally {
            res = "波波烤鸭";
        }
    }
}

  输出的结果是:bobo

  原因:通过指令分析我们可以发现在 return 代码执行的时候会将局部变量保存在 栈帧的顶部,然后在finally中修改的还是原来的栈帧位置的局部变量,最终返回的信息还是栈帧顶部的变量,所以finally代码块在return关键字之后会执行,但是不会改变栈帧顶部的信息。

指令分析

  首先我们要清楚在jvm中,每个线程都具有自己的虚拟机栈。当执行方法时,如上面的getName,就会创建一个栈帧(存储局部变量表,操作数栈等信息)进入虚拟机栈。每一个方法从调用到执行完毕,就是一个栈帧从虚拟机栈中入栈到出栈的过程。对应的栈帧情况为

【面试八股文】每日一题:谈谈你对异常的理解,每日一题,Java,面试,线程,异常

ldc:将int,float或者String类型常量从常量池推送至栈顶。
astore:将栈顶引用型类型数据存入指定本地变量。
aload:将制定的引用类型变量推送至栈顶

查看关键的指令为:

【面试八股文】每日一题:谈谈你对异常的理解,每日一题,Java,面试,线程,异常

还有一种情况需要注意,如果finally和try块中都有return关键字会怎么样呢?

public class Demo02 {
    public static void main(String[] args) {
        Demo02 demo02 = new Demo02();
        System.out.println(demo02.getName("bobo"));
    }

    public String getName(String name){
        String res = "";
        try {
            res = name;
            return  res;
        }finally {
            res = "波波烤鸭";
            return res; // 指令中返回的就不是栈帧顶部的数据了 而是 res 对应的栈帧位置
        }
    }
}

【面试八股文】每日一题:谈谈你对异常的理解,每日一题,Java,面试,线程,异常
  通过指令我们可以看到在finally中的return关键字的指令返回的就是finally中的局部变量的信息,可以理解为finally中的return会覆盖掉try块中的return逻辑。文章来源地址https://www.toymoban.com/news/detail-641176.html

到了这里,关于【面试八股文】每日一题:谈谈你对异常的理解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • elasticsearch面试八股文

    es的存储和更新机制 Elasticsearch(ES)是一个开源的分布式搜索和分析引擎,其存储架构和更新机制如下: 存储架构: 索引(Index) :ES的数据组织单元是索引,每个索引可以包含多个类型(Types),类似于数据库中的表。索引是由一个或多个分片(Shard)组成的,用于将数据

    2024年02月16日
    浏览(44)
  • 前端常见面试八股文

    1、H5新增标签有哪些? 一、语义化标签 header、footer、nav、aside、section、article 语义化的意义? 1、更适合搜索引擎的爬虫爬取有效的信息,利于SEO。 2、对开发团队很友好,增加了标签的可读性,结构更加的清晰,便于团队的开发和维护。 二、多媒体标签 视频标签:video 属性

    2023年04月08日
    浏览(84)
  • Java 面试八股文

    参考: 2023年 Java 面试八股文(20w字)_json解析失败_leader_song的博客-CSDN博客

    2024年02月13日
    浏览(56)
  • 吃透Redis面试八股文

    Redis连环40问,绝对够全! Redis( Remote Dictionary Server )是一个使用 C 语言编写的,高性能非关系型的键值对数据库。与传统数据库不同的是,Redis 的数据是存在内存中的,所以读写速度非常快,被广泛应用于缓存方向。Redis可以将数据写入磁盘中,保证了数据的安全不丢失,

    2023年04月24日
    浏览(41)
  • 吃透SpringMVC面试八股文

    SpringMVC是一种基于 Java 的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于Spring框架的一个模块。 它通过一套注解,让一个简单的Java类成为处理请求的控制器,而无须实现任何接口。同时它还支持RESTful编程风格的请求。 MVC的全名是 Model View Controller ,是模型(model)-视图

    2023年04月20日
    浏览(56)
  • 前端基础面试题八股文

    代码结构: 使页面在没有css的情况下,也能够呈现出好的内容结构 有利于SEO: 爬虫根据标签来分配的权重,因此可以和搜索引擎建立良好的沟通,帮助爬虫抓取更多的有效信息 方便其他设备解析: 如屏幕阅读器、盲人阅读器、移动设备等,以有意义的方式来渲染页面 便于

    2024年02月07日
    浏览(47)
  • Golang八股文面试题

    TCP实现可靠传输依靠的有序列号,自动重传,滑动窗口,确认应答等机制

    2024年04月15日
    浏览(48)
  • Java面试必备八股文

    1.1)Java有哪几种数据类型 基本数据类型:byte(1字节) short(2字节) int(4字节) long(8字节) float(4字节) double(8字节) char(2字节) boolean(1字节) 引用数据类型:String 类 接口 抽象类 枚举 数组 1.2)JVM、JRE和JDK的关系 JVM指的是Java的虚拟机,Java程序需要运行在虚拟机上

    2023年04月08日
    浏览(53)
  • 八股文面试day4

    Iterator_FailFast和Iterator_FailSafe FailFast:一旦发现遍历的同时其他人来修改,则 立刻抛异常 (说明:debug模式正在遍历这时添加一个元素,等这轮遍历完才抛异常) FailSafe:发现遍历的同时其他人来修改,应当能有应对策略,例如 牺牲一致性来让整个遍历运行完成 (说明:de

    2024年02月05日
    浏览(26)
  • C++面试八股文:技术勘误

    不知不觉,《C++面试八股文》已经更新30篇了,这是我第一次写技术博客,由于个人能力有限,出现了不少纰漏,在此向各位读者小伙伴们致歉。 为了不误导更多的小伙伴,以后会不定期的出勘误文章,请各位小伙伴留意。 在《C++面试八股文:C++中,设计一个类要注意哪些东

    2024年02月11日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包