【秋招冲刺-每日打卡】应届生JAVA岗-每日5道高频面试题【Day5】- 异常类篇(1)

最后

针对最近很多人都在面试,我这边也整理了相当多的面试专题资料,也有其他大厂的面经。希望可以帮助到大家。

下面的面试题答案都整理成文档笔记。也还整理了一些面试资料&最新2021收集的一些大厂的面试真题(都整理成文档,小部分截图)

在这里插入图片描述

最新整理电子书

在这里插入图片描述

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 每日小结
一: 前言
  • 大家好,这里是IT学习日记,一个非双一流大学毕业的深漂族,年少曾憧憬大厂,面试过许多家公司,也曾踩过无数坑,深知面试技巧和知识广度与深度对一个应届生乃至工作多年的开发者的重要性

  • 故特意收集了各个公司、大厂的面试高频题,通过每天打卡的方式,和大家一起记录和学习,希望能够帮助到应届生和开发者们少走弯路,一起冲向大厂!!!

每日壁纸

二: 面试题目

一: Error和Exception有什么区别?

=============================================================================================

(一): 为什么JAVA存在这种异常机制


异常机制是指当程序出现错误时,该如何处理,它给程序提供了一个安全的退出通道,就跟我们大楼的安全通道类似,当出现火灾或者不可控的情况时,人们可以通过安全通道逃生。

(二): 程序错误的分类


主要分为三种既编译时错误、运行时错误、逻辑错误。

1、编译时错误: 它指的是程序的编写不符合对应程序的语言语法,编译器会提示异常信息,且这些异常必须处理,否则程序无法被运行。

2、运行时错误: 它指的是程序运行时,运行环境发现程序不合理而抛出的错误,它主要是开发考虑不够细致导致,这种错误只能依靠异常机制来进行处理,而且能否预防程序在运行时出现错误也是一个开发者是否考虑周全,经验是否丰富的考察标准。

3、逻辑错误: 它指的是程序的运行流程和结果跟开发者预测的不一样,出现这种问题可能是开发没有考虑周全导致。

(三): 异常家族的结构


在这里插入图片描述

1、Throwable: 可抛出的,它是JAVA中所有异常的一个父类,用来定义所有可以作为异常被抛出来的类,Exception(异常)和Error(错误)是它的子类,Exception(异常)和Error(错误)的最大区别是异常可以通过异常处理机制在程序中处理,而错误则是没法通过程序处理。

Throwable常用方法:

在这里插入图片描述

2、Exception(异常): Throwable的子类之一,表示程序可以处理的异常,它又分为两类即编译时异常(CheckedException)和运行时异常(RuntimeException),这类异常应该尽可能在程序去处理它们。

  • 编译时异常: Exception中除了RuntimeException以外的异常,这种异常是必须处理的,否则编译程序不过,程序无法被执行,常见的如:IOException、SQLException等等。

  • 运行时异常: 这类异常编译器是无法检测的,一般是有程序的逻辑错误引起的,在程序中可以通过异常捕获机制来进行处理,处理这类异常主要看开发者是否考虑全面,开发经验是否丰富可以提前预测代码可能出现异常,常见的有:空指针异常,数组下标越界等。

在这里插入图片描述

3、Error(错误): Throwable的子类之一,表示无法通过程序处理的的错误,通常出现的原因和开发者无关,一般是由虚拟机JVM引起的,常见的如:VirtulMachineError、AWTError等等。

在这里插入图片描述

(四): 常见的异常有哪些


一: 常见的编译时异常

1、IOException: IO操作输入流或者输出流可能出现的异常

2、FileNotFoundException: 文件未找到异常

3、EOFException: 文件已结束异常

二: 常见的运行时时异常

1、NullPointerException: 空指针异常,当对象为null对,调用对象的某个方法时会抛出

2、ArrayIndexOutOfBoundsException: 数组下标越界异常,当访问的数组下标是负数或者大于数组的大小时会抛出该异常

3、ArithmeticException: 算术条件异常,如分母为0时的除法运算

4、SecurityException: 安全性异常

5、IllegalArgumentException: 非法参数异常

二: Java语言如何处理异常,关键字:try、catch、finally、throws、throw分别有什么作用?

===============================================================================================================================

JAVA中是通过面向对象的方式来处理异常,将不同的异常分为不同的类,在JAVA中,每一个异常都是一个对象,它们都属性Throwable的子类或者其子类的实例,如果某个地方出现了异常,则在该处抛出一个异常对象,这个异常对象中包含了异常信息,开发者可以通过异常处理机制对异常进行处理。

,在JAVA中异常处理机制主要是通过try、catch、finally、throws、throw这五个关键字来进行处理的。

如果某个方法过程中可能会throw出一个异常,那么这个代码范围可以使用try…catch包围起来,当出现异常的时候,则会进入到catch的逻辑中,用户可以根据自己的需要去进行相应的错误日志记录等,如果这个代码有资源在执行完成后需要释放,可以使用finally关键字来存放释放资源的逻辑。

在这里插入图片描述

1、try关键字:

主要用于包围可能存在异常情况的代码段,并不是范围越大越好,如果可能,尽量将包围的范围缩小,因为不出异常情况下效率是没有多大影响,但是如果出现异常,那么范围越大则效率越低,因为被try包围的代码快,会阻止对JAVA的优化如指令重排序。

2、catch关键字:

catch子句紧跟在try块后面,用来指定你想要捕获的异常的类型,进行异常日志的记录等逻辑处理。

3、finally关键字:

finally为确保一段代码不管发生什么异常状况都要被执行,除非虚拟机退出如:exit(0),常用于资源的释放。

4、throw关键字:

throw语句用来明确地抛出一个异常,如某个代码段已经会出现某个问题,但是你并不像在这里进行处理,此时可以通过throw关键字进行异常抛出,让调用者去处理。

5、throws关键字:

throws用来声明一个方法可能抛出的各种异常,用于方法声明处,表示这个方法中可能抛出的异常,需要调用者进行处理或者晚上抛出这些异常。

在这里插入图片描述

三: 在程序中遇到异常在所难免,你有什么好的处理异常经验?

==================================================================================================

1、异常不要用来做流程控制、条件控制,因为异常设计的初衷是解决程序运行中的各种意外情况,且异常的处理效率比条件判断方式要低很多(阿里巴巴开发规范手册)

在这里插入图片描述

2、代码划分为可能出现异常代码块和不可能出现异常代码块,可能出现异常的代码块使用try…catch异常捕获机制进行处理,而不应该对一大段代码进行try…catch,这不仅是不负责任的表现,同时出现异常时也很难定位到问题。

在这里插入图片描述

3、捕获异常是为了处理它,不要捕获了却什么都不处理而抛弃之,如果不想处理它,请将该异常抛给它的调用者。最外层的业务使用者,必须处理异常,将其转化为用户可以理解的

内容。

在这里插入图片描述

4、每个方法的异常最好有相应的文档描述,便于日后代码维护。

5、在事务的场景下,抛出异常被 catch 后,如果需要回滚,一定要注意手动回滚事务。

6、finally 块必须对资源对象、流对象进行关闭,有异常也要做 try-catch。如果 JDK7 及以上,可以使用 try-with-resources 方式.

在这里插入图片描述

最后的话

无论是哪家公司,都很重视Spring框架技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!

部分截图:
在这里插入图片描述

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。
同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,好了希望这篇文章对大家有帮助!**

部分截图:
[外链图片转存中…(img-76BzcuHJ-1715487018795)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值