基础 | Exception与Error

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bingbeichen/article/details/83616640

关于Java中异常处理部分,面试时经常会被问到 「Exception与Error有什么区别?」,建议重点关注。


Exception与Error有什么区别?

问题分析:既然问到两者的区别,说明两者是有必然联系的,故简单从两者的联系说起,重点突出两者的区别,最后可选择性的介绍Exception的体系结构。

参考答案:

联系:Exception和Error都继承于Throwable类,在Java中只有Throwable类的实例才可被抛出或者捕获,故可将Throwable类看做Java中异常与错误处理的核心。

区别:Error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题,比如内存溢出,不可能指望程序能处理这样的情况。而Exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。

常见的Error主要包括:

  • OutOfMemoryError:内存溢出错误
  • StackOverflowError:栈溢出错误
  • VirtualMachineError:虚拟机错误
  • NoClassDefFoundError:找不到类错误

PS:关于Exception的体系结构见下一问题。


谈谈你对Java中Exception类的理解?

问题分析:主要从编译时异常和运行时异常两个方面进行解释。

参考答案:

Exception类作为Java中异常处理机制的基本组成类型,其主要分为编译时异常和运行时异常。

编译时异常也叫可检查异常,指编译器要求必须处置的异常,即编译时异常不是说有异常才处理,而是在编译前对可能出现的异常隐患进行提示并要求处理。

运行时异常也叫不检查异常,指编译器不要求强制处置的异常,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响。

总而言之,对于运行时异常来说,可以不显式地进行处理;而对于编译时异常来说,必须要显式地进行处理。


常见的运行时异常有哪些?

参考答案:

  • ArithmeticException(算术异常)
  • ClassCastException (类转换异常)
  • IllegalArgumentException (非法参数异常)
  • IndexOutOfBoundsException (下标越界异常)
  • NullPointerException (空指针异常)
  • SecurityException (安全异常)

扩展面试题

问:如下代码块的返回值是什么?

public static int WithException() {
	int i = 10;
	try {
		i = i / 0;
		return --i;
	} catch (Exception e) {
		--i;
		return --i;
	} finally {
		--i;
		return --i;
	}
}

答:6。因为finally代码块的存在,try和catch中的return语句不会立马返回调用者,而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值,但由于finally中有return语句,故直接从finally代码块中直接返回。(不太好理解,大家可以debug看一下)


推荐阅读


欢迎关注

Java名企面试吧,每天10点24分,我们不见不散!

丙子先生的宗旨是,每天以短篇幅讲高频面试题,不增加太多负担,但需要持之以恒。

能力有限,欢迎指教!

猜你喜欢

转载自blog.csdn.net/bingbeichen/article/details/83616640