搜文章
推荐 原创 视频 Java开发 iOS开发 前端开发 JavaScript开发 Android开发 PHP开发 数据库 开发工具 Python开发 Kotlin开发 Ruby开发 .NET开发 服务器运维 开放平台 架构师 大数据 云计算 人工智能 开发语言 其它开发
Lambda在线 > Java最全面试题库 > 【007期】JavaSE面试题(七):异常

【007期】JavaSE面试题(七):异常

Java最全面试题库 2020-06-30

【007期】JavaSE面试题(七):异常


开篇介绍

大家好,我是Java面试题库提裤姐,今天这篇是面试系列的第七篇,主要总结了JavaSE中异常类相关面试题,在后续,会沿着第一篇开篇的知识线路一直总结下去,做到日更!如果我能做到百日百更,希望你也可以跟着百日百刷,一百天养成一个好习惯。


Q:

说一下Java中的异常体系?


【007期】JavaSE面试题(七):异常



Q:

Error和Exception的区别?


Error(错误):

系统中的错误,是在程序编译时出现的错误,只能通过修改程序才能修正。一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。 


Exception(异常):

表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。


Q:

写出你最常见的 5 个 RuntimeException?

(1)java.lang.NullPointerException 空指针异常;出现原因:调用了未经初始化的对象或者是不存在的对象。

(2)java.lang.ClassNotFoundException 指定的类找不到;出现原因:类的名称和路径加载错误;通常都是程序

试图通过字符串来加载某个类时可能引发异常。

(3)java.lang.NumberFormatException 字符串转换为数字异常;出现原因:字符型数据中包含非数字型字符。

(4)java.lang.IndexOutOfBoundsException 数组角标越界异常,常见于操作数组对象时发生。

(5)java.lang.IllegalArgumentException 方法传递参数错误。

(6)java.lang.ClassCastException 数据类型转换异常。


Q:

如何处理异常?

异常的处理方式有两种:

  • ⾃⼰处理。

  • 向上抛, 交给调⽤者处理。

具体的处理方式的选择原则:

  • 自己明确的知道如何处理的, 就要处理掉。

  • 不知道如何处理的, 就交给调⽤者处理。

注:异常, 不能捕获了之后什么也不做。或者只是使⽤e.printStacktrac


Q:

try()里面有⼀个return语句, 那么后面的finally{}里面的代码会不会被执行?什么时候执行,return前还是return后?

如果try中有return语句, 那么finally中的代码还是会执⾏。

因为return表示的是要整个方法体返回, 所以,finally中的语句会在return之前执⾏。

但是return前执行的finally块内,对数据的修改效果对于引用类型和值类型会所不同:

 1// 测试 修改值类型
2
3static int f() {
4
5    int ret = 0;
6
7    try {
8
9        return ret;  // 返回 0,finally内的修改效果不起作用
10
11    } finally {
12
13        ret++;
14
15        System.out.println("finally执行");
16
17    }
18
19}
20
21
22
23// 测试 修改引用类型
24
25static int[] f2(){
26
27    int[] ret = new int[]{0};
28
29    try {
30
31        return ret;  // 返回 [1],finally内的修改效果起了作用
32
33    } finally {
34
35        ret[0]++;
36
37        System.out.println("finally执行");
38
39    }
40
41


Q:

调用下面的方法,得到的返回值是什么?

 1    public int getNum() {
2
3        try {
4
5            int a = 1 / 0;
6
7            return 1;
8
9        } catch (Exception e) {
10
11            return 2;
12
13        } finally {
14
15            return 3;
16
17        }
18
19    }

返回值为3。

代码在走到第 3 行的时候遇到了一个 MathException,这时第四行的代码就不会执行了,代码直接跳转到 catch语句中,走到第 6 行的时候,异常机制有这么一个原则如果在 catch 中遇到了 return 或者异常等能使该函数终止的话那么有 finally 就必须先执行完 finally 代码块里面的代码然后再返回值。因此代码又跳到第 8 行,可惜第 8 行是一个return 语句,那么这个时候方法就结束了,因此第 6 行的返回结果就无法被真正返回。如果 finally 仅仅是处理了一个释放资源的操作,那么该道题最终返回的结果就是 2。因此上面返回值是 3。


Q:

throw 和 throws 的区别?

throw:

  • throw 语句用在方法体内,表示抛出异常,由方法体内的语句处理。

  • throw 是具体向外抛出异常的动作,所以它抛出的是一个异常实例,执行 throw 一定是抛出了某种异常。


throws:

  • throws 语句是用在方法声明后面,表示如果抛出异常,由该方法的调用者来进行异常的处理。

  • throws 主要是声明这个方法会抛出某种类型的异常,让它的使用者要知道需要捕获的异常的类型。

  • throws 表示出现异常的一种可能性,并不一定会发生这种异常。







“一个专注于分享各类Java面试题的号主,长按二维码关注我吧 ”

祝大家都能拿到心仪的offer!






【007期】JavaSE面试题(七):异常


【007期】JavaSE面试题(七):异常
【007期】JavaSE面试题(七):异常

等风也等你



文章都看完了不点个 吗

版权声明:本站内容全部来自于腾讯微信公众号,属第三方自助推荐收录。《【007期】JavaSE面试题(七):异常》的版权归原作者「Java最全面试题库」所有,文章言论观点不代表Lambda在线的观点, Lambda在线不承担任何法律责任。如需删除可联系QQ:516101458

文章来源: 阅读原文

相关阅读

关注Java最全面试题库微信公众号

Java最全面试题库微信公众号:tikujie

Java最全面试题库

手机扫描上方二维码即可关注Java最全面试题库微信公众号

Java最全面试题库最新文章

精品公众号随机推荐