【Java面试知识】异常

来源:互联网 发布:手机端js关闭当前页面 编辑:程序博客网 时间:2024/06/04 19:45

【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代码块里面释放显式锁)


原创粉丝点击