程序本身可以捕获并且可以处理的异常。 Exception 这种异常又分为两类 :运行时异常和编译时异
常。
运行时异常
定义: RuntimeException 类及其子类 ,表示 JVM 在运行期间可能出现的异常。
特点:Java 编译器不会检查它。也就是说 ,当程序中可能出现这类异常时 ,倘若既"没有通过throws
声明抛出它" ,也"没有用try-catch语句捕获它" ,还是会编译通过。比如NullPointerException空指针
异常、ArrayIndexOutBound Exception数组下标越界异常、ClassCastException类型转换异常、
ArithmeticExecption算术异常。此类异常属于不受检异常 ,一般是由程序逻辑错误引起的 ,在程序中
可以选择捕获处理 ,也可以不处理。虽然 Java 编译器不会检查运行时异常 ,但是我们也可以通过
throws 进行声明抛出 ,也可以通过 try-catch 对它进行捕获处理。如果产生运行时异常 ,则需要通过
修改代码来进行避免。例如 ,若会发生除数为零的情况 ,则需要通过代码避免该情况的发生!
RuntimeException 异常会由 Java 虚拟机自动抛出并自动捕获(就算我们没写异常捕获语句运行时也
会抛出错误!! ) ,此类异常的出现绝大数情况是代码本身有问题应该从逻辑上去解决并改进代码。
编译时异常
定义:
Exception 中除 RuntimeException 及其子类之外的异常。
特点: Java 编译器会检查它。如果程序中出现此类异常 ,比如 ClassNotFound Exception(没有找到
指定的类异常) , IOException( IO流异常) ,要么通过throws进行声明抛出 ,要么通过try-catch进
行捕获处理 ,否则不能通过编译。在程序中 ,通常不会自定义该类异常 ,而是直接使用系统提供的异
常类。该异常我们必须手动在代码里添加捕获语句来处理该异常。
4. 受检异常与非受检异常
Java 的所有异常可以分为受检异常(checked exception)和非受检异常(unchecked
exception)。
受检异常
编译器要求必须处理的异常。正确的程序在运行过程中 ,经常容易出现的、符合预期的异常情况。一
旦发生此类异常 ,就必须采用某种方式进行处理。除 RuntimeException 及其子类外 ,其他的
Exception 异常都属于受检异常。编译器会检查此类异常 ,也就是说当编译器检查到应用中的某处可
能会此类异常时 ,将会提示你处理本异常——要么使用try-catch捕获 ,要么使用方法签名中用
throws 关键字抛出 ,否则编译不通过。
非受检异常
编译器不会进行检查并且不要求必须处理的异常 ,也就说当程序中出现此类异常时 ,即使我们没有try-
catch捕获它 ,也没有使用throws抛出该异常 ,编译也会正常通过。该类异常包括运行时异常
(RuntimeException极其子类)和错误(Error)。
Java异常关键字
• try – 用于监听。将要被监听的代码(可能抛出异常的代码)放在try语句块之内 ,当try语句块内发生异
常时 ,异常就被抛出。
评论0