文章目录
前言
该文章总结了Java中的异常与处理。
一、概念
程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常
简单来说,异常就是不正常。
二、Java中异常结构
Throwable 类是 Java 语言中所有错误或异常的超类
如图所示,在Java中,Throwable 类是 Java 语言中所有错误或异常的超类。
同时他也提供了很多方法,用于查看堆栈信息。
1.错误类(Error)
Error 是 Throwable 的子类,用于指示合理的应用程序不应该试图捕获的严重问题。大多数这样的错误都是异常条件。虽然 ThreadDeath 错误是一个“正规”的条件,但它也是 Error 的子类,因为大多数应用程序都不应该试图捕获它。
出现以Error结尾的就都是错误(除唯一的ThreadDeath外),如:IOError(严重的 I/O 错误)
出现Error结尾的严重错误,我们一般我们获取不了,也处理不了,所以只要简单了解即可。
2.异常类(Exception)
Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。
出现以Exception结尾的异常,都是异常类。这个异常是我们可以处理的。
Exception分为两种, 运行时异常 和 非运行时异常。
2.1 运行时异常(RuntimeException)
RuntimeException 是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。
运行时异常的子类不需要捕捉异常,只不过在编译时没有报错。但是当运行时发生异常时,还是会出现异常信息。可以进行try-catch捕获或throws抛出。
如下代码:编译期没有报错,但是运行时会发生空指针异常。
public static void main(String[] args){
String s = null;
System.out.println(s.length());
}
其他常见运行时异常:
异常 | 描述 |
---|---|
ArithmeticException | 当出现异常的运算条件时,抛出此异常。 |
ArrayStoreException | 试图将错误类型的对象存储到一个对象数组时抛出的异常。 |
ClassCastException | 当试图将对象强制转换为不是实例的子类时,抛出该异常。 |
IllegalArgumentException | 抛出的异常表明向方法传递了一个不合法或不正确的参数。 |
IndexOutOfBoundsException | 指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。 |
NullPointerException | 当应用程序试图在需要对象的地方使用 null 时,抛出该异常。 |
2.1 非运行时异常
Exception类下,除了运行时异常(RuntimeException),其他异常都是非运行时异常,需要手动try-catch捕获或throws抛出,不然编译器会报错。
如下代码:编译期会报错,需要手动try-catch或throws抛出。
public static void main(String[] args){
File file = new File("1");
boolean newFile = file.createNewFile();
}
其他常见非运行时异常:
异常 | 描述 |
---|---|
ClassNotFoundException | 当应用程序试图使用以下方法通过字符串名加载类时,抛出该异常: |
NoSuchFieldException | 类不包含指定名称的字段时产生的信号。 |
NoSuchMethodException | 无法找到某一特定方法时,抛出该异常。 |
IOException | 当发生某种 I/O 异常时,抛出此异常。 |
FileNotFoundException | 当试图打开指定路径名表示的文件失败时,抛出此异常。 |
三、Java中的异常处理
1.捕获(try-catch)
try-catch捕获格式:
如果有多个异常,就多方几个catch语句即可
try{
可能发生异常的代码
}catch(捕获的异常类型 变量名){
处理异常的代码
捕获空指针:
public static void main(String[] args){
try{
String s = null;
System.out.println(s.length());
} catch (NullPointerException e) {
System.out.println("空指针异常了");
e.printStackTrace();
}
}
2.抛出(throws)
throws
格式:
throws 异常类型
实例:在方法上抛出,抛出IOException异常。
public static void main(String[] args) throws IOException {
File file = new File("1");
boolean newFile = file.createNewFile();
}
throw
格式:创建并抛出一个异常。
方法() throws 抛出的异常类型{
if(异常发生){
throw new 异常类型();
}
实例:
public static void main(String[] args) throws Exception {
if (true) {
throw new Exception("发生了异常");
}
}