异常
1、概述
Java中异常就是程序出现了不正常的情况。
2、异常的体系
3、JVM默认处理异常方案
当程序遇到异常的时候,程序会将异常的名称,异常原因及异常出现位置等信息输出在控制台,并且程序停止执行。
4、异常处理的方式
一般当程序遇到异常的时候,异常处理的方法有两种:捕获和向上抛出。
(1)try...catch...(捕获)
(2)throws(抛出)
并不是所有情况都有权限进行异常处理,所以有了throws,对于不想现在处理或者处理不了的异常可以选择向上抛出。
编译时异常,使用throws方案,将来谁调用谁处理异常。
5、Throwable的常见方法
6、运行时异常和编译时异常有何异同?
所有的RuntimeException类及其子类被称为运行时异常,其他的异常都是编译时异常。
相同点:都是Exception的子类。
不同点:运行时异常:在编译期是不检查的,运行出现问题后,再回来修改代码。
一般异常:编译期就必须处理的,否则程序不能通过编译,就更不能正常运行了。
7、throws和throw的区别
throws
(1)用在方法声明后面,跟的是异常类名
(2)表示抛出异常,由该方法的调用者来处理
(3)表示出现异常的一种可能性,并不一定会发生这些异常
throw
(1)用在方法体内,跟的是异常对象名
(2)表示抛出异常,由方法体内的语句处理
(3)执行throw一定抛出了某种异常
注意:
class Exc0 extends Exception {
}
class Exc1 extends Exc0 {
}
class Demo {
public static void main(String[] args) {
try {
throw new Exc1();
} catch (Exception e) {
System.out.println("Exception");
} catch (Exc0 e) {
System.out.println("Exc0");
}
}
}
这样的看上去感觉没有问题,但是当我们把代码放入程序用或出现报错。因为Exc0是Exception的子类,先去判断Exception的话,就永远不会执行判断Exception子类的语句了。应该改一下判断语句的位置。如下:
class Demo {
public static void main(String[] args) {
try {
throw new Exc1();
} catch (Exc0 e) {
System.out.println("Exc0");
} catch (Exception e) {
System.out.println("Exception");
}
}
}
所以在用多个catch进行判断的时候,应该由上到下,按从小到大的顺序书写判断语句。