Android面试题详解之异常Exception与错误Error区别

Java中的finally块通常总会执行,即使try中有return。在try中return的值会被保存,执行finally后返回。然而,如果调用System.exit或线程被设置为守护线程,finally可能不会执行。Error是程序无法处理的严重错误,而Exception是可以处理的异常,包括运行时异常和非运行时异常,编译器要求对非运行时异常进行处理。

finally中的代码一定会执行吗?try里有return,finally还执行么

这道题想考察什么?

对Java语言的深层次理解,避免在开发时写出"问题"代码

考察的知识点

JVM执行流程

考生应该如何回答

Java官方文档中对finally的描述如下:

The `finally` block *always* executes when the `try` block exits.

大致意思是:finally代码块中的内容一定会得到执行。

JVM规范里面同样也有明确说明

If the try clause executes a return, the compiled code does the following:

1. Saves the return value (if any) in a local variable.
2. Executes a jsr to the code for the finally clause.
3. Upon return from the finally clause, returns the value saved in the local variable.

意思是如果在try中存在return的情况下,会把try中return的值存到栈帧的局部变量表中,然后去执行finally语句块,最后再从局部变量表中取回return的值返回。另外,当try和finally里都有return时,会忽略try的return,而使用finally的return。

特殊情况

在正常情况下,finally中的代码一定会得到执行,但是如果我们将执行try-catch-finally 代码块的线程设置为守护线程,或者在fianlly之前调用System.exit 结束当前虚拟机,那么finally则不会得到执行:

try{
	System.exit(0);
}catch (Exception e){

}finally {
	
}

Thread t1 = new Thread(){
    @Override
    public void run(){
        //try-catch-finally
    }
};
t1.setDaemon(true);//设置为守护进程
t1.start();

2.8 Java异常机制中,异常Exception与错误Error区别

这道题想考察什么?

在开发时需要时候需要自定义异常时,应该选择定义Excption还是Error?编写的代码触发Excption或者Error分别代表什么?

考察的知识点

Java异常机制

考生应该如何回答

在Java中存在一个Throwable可抛出类,Throwable有两个重要的子类,一个是Error,另一个则是Exception。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oCdRO3Fe-1686365970528)(images\异常.png)]

Error是程序不能处理的错误,表示程序中较严重问题。例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError等等。这些错误发生时,JVM一般会选择线程终止。这些错误是不可查的,它们在程序的控制和处理能力之外,而且绝大多数是程序运行时不允许出现的状况。

Exception是程序可以处理的异常。而Exception又分为运行时异常(RuntimeException)与非运行时异常。

  • 运行异常

    运行时异常,又称不受检查异常 。所谓的不受检查,指的是Java编译检查时不会告诉我们有这个异常,需要在运行时候才会暴露出来,比如下标越界,空指针异常等。

  • 非运行时异常

    RuntimeException之外的异常我们统称为非运行时异常,比如IOException、SQLException,是必须进行处理的异常(检查异常) ,如果不处理(throw到上层或者try-catch),程序就不能编译通过 。

更多面试题详解可以扫描二维码免费领取!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值