赞
踩
Java 中的异常,主要分为两大类,即受检异常(checked exception)和非受检异常(unchecked exception)
对于受检异常来说,如果一个方法在声明的过程中证明了其要有受检异常抛出:
public void test() throws Exception{}
那么,当我们在程序中调用他的时候,一定要对该异常进行处理(捕获或者向上抛出),否则是无法编译通过的。
这是一种强制规范。
这种异常在 IO 操作中比较多。比如 FileNotFoundException
,当我们使用 IO 流处理一个文件的时候,有一种特殊情况,就是文件不存在,所以,在文件处理的接口定义时他会显示抛出 FileNotFoundException
,其目的就是告诉这个方法的调用者,我这个方法不保证一定可以成功,是有可能找不到对应的文件的,你要明确的堆这种情况做特殊处理。
所以说,当我们希望我们的方法调用者,明确的处理一些特殊情况时候,就应该使用受检异常。
对于非受检异常来说,一般是运行时异常,继承自 RuntimeException。在编写代码的时候,不需要显示的捕获,但是如果不捕获,在运行期如果发生异常就会中断程序的执行。
这种异常一般可以理解为是代码原因导致的。比如发生空指针、数组越界等。所以,只要代码写的没问题,这些异常都是可以避免的。也就不需要我们显示的进行处理。
试想一下,如果你要对所有可能发生空指针的地方做异常处理的话,那相当于你的所有代码都需要做这件事。
Throwable
是 java 中最顶级的异常类,继承 Object,实现了序列化接口,有两个重要的子类:Exception
和 Error
,二者都是 Java 异常处理的重要子类,各自包含大量子类。
error 表示系统级的错误,是 java 运行环境内部错误或者硬件问题,不能指望程序来处理这样的问题,除了退出运行外别无选择,它是 Java 虚拟机抛出的。如 OutOfMemoryError
、StackOverflowError
这两种常见的错误都是 Error
。
exception 表示程序需要捕捉、需要处理的异常,是由与程序设计的不完善而出现的问题,程序必须处理的问题。
分为 RuntimeException
和其他异常。
这个题目,其实面试官考的还挺多的,主要考察面试者实战经验是否丰富,所以常见的 RuntimeException
要能回答得尽量多回答一些。
throws、throw、try、catch、finally
自定义异常就是开发人员自己定义的异常,一般通过继承 Exception 的子类的方式实现。
编写自定义异常实际上是继承一个 API 标准异常类,用新定义的异常处理信息覆盖原有信息的过程。
这种用法在 Web 开发中也比较常见,一般可以用来自定义业务异常。如余额不足、重复提交等。这种自定义异常有业务含义,更容易让上层理解和处理。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。