Java高频面试题(异常)
4 异常
4.1 Java中的异常类型是什么?
java中有两种异常:检查时异常和非检查时异常。
非检查时异常就是我们常说的运行时异常,无需显示声明抛出,也就是不需要try-catch或者在方法后使用throws进行声明,就算方法或者是构造函数的执行可以能会抛出这样的异常,并且非检查的异常可以传播到方法或者构造函数的外面。
检查时异常也就是我们常说的编译时异常,我们必须使用try-catch或者throws进行异常处理。如果没有进行异常处理,在我们编译程序的时候就会发生错误,无法正常进行编译。
4.2 Java中的Exception和Error有什么区别
Exception与Error都是Throwable的子类。
Exception是用户程序可以捕获的异常情况,作为程序员的我们是可以继续进行处理,来保证程序正常运行。
Error是系统层面或者说JVM层面的异常,我们是无法进行处理的,例如内存溢出,这类异常我们是无法捕获的。
4.3 throw和throws有什么区别
throw是关键字,一般用在方法体中,代表我们进行异常抛出,代表一定会有异常抛出。
throws是语句,在程序声明处进行使用,表明可能会出现的异常,但是并不代表程序运行一定会产生这个异常,表明方法不能处理的异常,如果程序产生了异常,会将异常向上抛出,多个异常之间是用逗号来进行分割的。
4.4 finally代码块是什么
无论是否抛出异常,finally代码块是总是会被执行的(处理强行关闭JVM等极端操作,finally就不会被执行了),一般用于进行资源的释放,如:I/O缓冲区,数据库连接。
4.5 异常处理完成之后,Exception对象会发生什么变化
Exception对象会在下一垃圾回收过程中被回收掉。
4.6 Java异常处理机制有哪些
使用try-catch-fianlly语句来捕获异常
使用throws来声明可能会出现的异常,如果异常出现会向上抛出
使用throw将异常来进行抛出
4.7 为什么要进行异常处理
Java异常处理机制可以让程序具有极好的容错性与健壮性,不会因为出现异常而是程序崩溃停止。当程序运行出现意外情形时,系统会自动生成一个Exception对象来通知程序,从而实现类“业务功能实现代码”与“错误处理代码”分离,增强了程序的可读性。
4.8 Java有哪些常见的异常
ClassCastException:类转换异常一般出现在对象向下转换时,当我们视图将对象强制转换为不是实例的子类的时候,抛出该异常。
ArrayIndexOutOfBoundException:数组下标越界异常,对于数组来说,当你使用不合法的索引去访问数组的时候就会抛出该异常。
NullPointerException:空指针异常,通过null进行方法和属性调用会抛出该异常
ArithmeticException:算数运算异常,除以0就会抛出该异常
NumberFormatException:数字转换异常,当一个字符串想要转换为一个指定的数据类型,但是字符串的格式不满足数组类型要求的格式的时候,抛出此异常。
InputMismatchExcep