Java基础之异常体系梳理

1异常的基本概念

异常是导致程序中断运行的一种指令流。如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失,所以要在程序的设计中必须要考虑各种异常的发生,并正确做好相应的处理这样才能保证程序正常的执行。

2异常类的继承结构

在Java的异常体系中,Throwable可以用来表示任何可以作为异常抛出的类,分为两种:Error和Exception。其中Error用来表示JVM无法处理的错误,Exception又分为两种:

(1)受检异常:需要用try------catch----语句捕获并进行处理并且可以从异常中恢复;
(2)非受检异常:是程序运行时异常,例如:空指针异常。

Java基础之异常体系梳理_第1张图片

3.异常处理

对于不同的异常,java采用不同的异常处理方式:
(1)Error:一般表示java运行时,JVM出现问题。比如:NoClassDefFoundError等;比如说当JVM耗完内存时,将出现OutOfMemoryError。此类错误发生时JVM将终止线程。

(2)运行时异常将由系统自动抛出,应用本身可以选择处理或者忽略该异常。

(3)可查异常必须进行捕获或者抛出该方法外交给上层处理。主方法再向上抛异常时,只能将异常抛给JVM进行处理。好比一个公司,部门事情处理不了,要上报给经理,经理再解决不了要上报给董事长,到董事长了,也就到头了,那么Java的头就是JVM了。
【异常处理格式】
try {
	//有可能出现异常的语句
} catch(异常类   异常对象)  {
	//编写异常处理的语句
} [ catch(异常类  异常对象) {
	//编写异常处理的的语句
}....]
[ finally {
	//一定会运行到的代码;
}]

4.面试题

(1)检查型异常和非检查型异常有甚么区别?

答:检查型异常都需要try...catch...finally进行处理,否则会出现编译器报错;对于非检查型异常,不需要这样做。所有继承Exception的类的异常都是检查型异常;所有继承RuntimeException都被称为非检查型异常。

(2)Error和Exception有甚么区别?

答:Error表示恢复不是不可能但很困难的情况下的一种严重问题;	Exception表示一种设计或实现问题,也就是说,表示程序如果运行正常从不发生的情况。

(3)final ,finally ,和finalize的区别?

答:final时java一个关键字,用于声明属性、方法、和类。分别表示属性不可改变,方法不可覆写,类不可继承;
finally是异常处理语句结构的一部分,表示finally里面的代码块一定会执行,可以使用finally关键字作为异常的统一出口;
finalize是Object类的一个方法,在垃圾回收器执行的时候,会调用被回收对象的此方法,供垃圾收集时,其它资源回收,例如关闭文件等。

(4)常见的异常

答:NullPointException:空指针异常,jdk8可以用Optional对象来避免;
IndexOutOfBoundsException:数组下标越界异常;
NumeberFormatException:数字类型转换异常;
ClassCastException:类型转换异常,发生在强转时;
FileNotFoundException:找不到指定文件异常;
ClassNotFoundException:找不到指定引用的类;
OutOfMemoryError:内存溢出错误;
StackOverflowError:栈溢出错误,一般是函数的死循环。

你可能感兴趣的:(Java基础之异常体系梳理)