java混淆异常

mac2024-05-09  105

1、运行时异常和非运行时异常

(1)运行时异常都是RuntimeException类及其子类异常,"出现都是你的代码问题,你可以选择处理也可不处理,代码优化可以处理"。

如NullPointerException、IndexOutOfBoundsException等,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。

这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

(注:常见RuntimeException:

ArrayStoreException                试图将错误类型的对象存储到一个对象数组时抛出的异常 ClassCastException                试图将对象强制转换为不是实例的子类时,抛出该异常 IllegalArgumentException         抛出的异常表明向方法传递了一个不合法或不正确的参数 IndexOutOfBoundsException   指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出 NoSuchElementException       表明枚举中没有更多的元素 NullPointerException                当应用程序试图在需要对象的地方使用 null 时,抛出该异常)

(2)非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。可查异常。如IOException、SQLException等以及用户自定义的Exception异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch并处理,否则程序就不能编译通过。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。

2、可查异常和不可查异常(受检异常,非受检异常)

通常,Java的异常(包括Exception和Error)分为可查的异常(checked exceptions)和不可查的异常(unchecked exceptions)。

可查异常(编译器要求必须处置的异常):正确的程序在运行中,很容易出现的、情理可容的异常状况。可查异常虽然是异常状况,但在一定程度上它的发生是可以预计的,而且一旦发生这种异常状况,就必须采取某种方式进行处理。 除了RuntimeException及其子类以外,其他的Exception类及其子类都属于可查异常。这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。

不可查异常(编译器不要求强制处置的异常):  包括运行时异常(RuntimeException与其子类)和错误(Error)。

如果使用throw在方法体中抛出可查异常,则需要在方法头部声明方法可能抛出的异常类型。程序会在throw语句后立即终止,它后面的语句执行不到,然后在包含它的所有try块中(可能在上层调用函数中)从里向外寻找含有与其匹配的catch子句的try块。

综上,

 

最新回复(0)