【Java面试知识】异常
Java中的两种异常类型是什么?他们有什么区别?
Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。
不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。
相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明。
编译时异常(Exception)和运行时异常(RunException)
throw和throws有什么区别?
throw关键字用来在程序中明确的抛出异常。
相反,throws语句用来表明方法不能处理的异常。每一个方法都必须要指定哪些异常不能处理,所以方法的调用者才能够确保处理可能发生的异常,多个异常是用逗号分隔的。
Java中Exception和Error有什么区别?
Exception和Error都是Throwable的子类。
Exception用于用户程序可以捕获的异常情况。
Error定义了不期望被用户程序捕获的异常。
异常处理完成以后,Exception对象会发生什么变化?
Exception对象会在下一个垃圾回收过程中被回收掉。
finally代码块和finalize()方法有什么区别?
无论是否抛出异常,finally代码块都会执行,它主要是用来释放应用占用的资源。finalize()方法是Object类的一个protected方法,它是在对象被垃圾回收之前由Java虚拟机来调用的。
常见的Exception和Error
Exception、Error体系(写出五个异常和五个错误)
NullPointerException
ArrayIndexOutOfBoundsException
ClassCastException
ArithmeticException: / by zero
NumberFormatException
CloneNotSupportedException
FileNotFoundException
ClassNotFoundException
NoSuchMethodException
OutOfMemoryError
IOError
VirtualMachineError
ThreadDeath
AssertionError
异常处理的时候,finally代码块的重要性是什么
无论是否抛出异常,finally代码块总是会被执行(除非在finally块之前执行了System.exit方法,退出虚拟机)。
就算是没有catch语句同时又抛出异常的情况下,finally代码块仍然会被执行。
最后要说的是,finally代码块主要用来释放资源,比如:I/O缓冲区,数据库连接。
(也在finally代码块里面释放显式锁)