1。什么是异常
异常是一种状态,是程序出现了符合该异常条件的一种状态。因此,他也可以说成是一种条件。
2。为什么要捕获异常
捕获异常是为了对程序中出现的某种状况进行处理。如果有异常而没有捕获,异常将会向上一层传播,最终导致线程在此中止。
3。什么是check异常和unchecked异常
uncheck异常一般是RuntimeException.出现这类异常,编译器不会强制要用户去捕获(当然你可以捕获)。 编译器会强制要求用户对checked异常进行捕获并作出一定的处理。
4。为什么不推荐捕获顶层异常(Exception)
程序中会发生各种各样的异常。除非你的程序是个终端(一个业务的终点),否则不推荐捕获顶层异常。
在程序的中间环节捕获所有异常毫无意义,并有可能导致流程上的隐患。比如,出现某种异常后,期望线程就此结束,不去做下面的工作,但是如果在中间环节对顶层异常进行了非法处理,程序有可能会运行下去,将导致不可控的错误。
5。为什么要自定义异常
自定义异常是为了设置异常链的起点。一般情况下,我们都是允许每个程序员看到所有的异常信息,这个时候大多数都是把下一层的异常直接重掷到上一层。然而在多层次的结构中,我们有时候需要隐藏底层异常(这种异常的信息很多,很枯燥),而给消费者提供一个更为直观的异常,这个时候我们需要自定义异常。有的异常类jdk已经给我们提供,比如常用的IllegalArgumentException。如果你想在此再作包装,你可以创建自己的异常类。如此,消费者将以此异常作为异常链的起点。
6。为什么要重掷异常
重掷异常是处理异常的一种方式。在捕获了某种异常后,用户可能不希望在这一层做出裁决,或者即使做出了一定的处理,但仍然需要向上一层报告,因此需要重掷异常。
7。异常机制。
一旦某个点发生异常,这个点下面和catch语句之间的代码将不会被执行。因此,异常是一种中止流程的很有效的机制。
关于异常,在effective java中提到“异常转译”和“异常连接”的概念。本人倾向于用“异常转译”,前提是要配置log4j,并作详细的日志纪录。