异常概念
- 如果某个方法不能按照正常的途径完成任务,可以通过另一种路径退出方法,在这种情况下会抛出一个封装了错误信息的对象。此时,
这个方法会立刻退出同时不返回任何值
。调用这个方法的其他代码无法继续执行,异常处理机制会将代码执行交给异常处理器
。
异常分类
Throwable是java语言中所有错误或异常的超类
。
Error
- Error类是Throwable的子类,指在
java运行时系统的内部错误和资源耗尽错误
,应用程序不会抛出该类对象。 - 一般发生这种异常,
JVM会选择终止程序
。因此我们编写程序时不需要关心这类异常。比如OutOfMemoryError。
Exception
- Exception是
可以处理的异常
,是所有异常类的父类。 - RuntimeException和checked exception(受査异常也称非运行时异常)继承Exception。
- unchecked Exception
- unchecked Exception(非受査异常),包括Error和RuntimeException,比如常见的NullPointerException、IndexOutOfBoundsException。RuntimeException是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类,
java编译器不要求必须进行异常捕获处理或者抛出声明
,由程序员自行决定。
- checked exception
java编译器强制程序员必须进行捕获处理
,比如常见的有IOExeption 和SQLException。如果不进行捕获或者抛出声明处理,编译都不会通过。
异常的处理方式
抛出异常
public static void main(String[] args) {
String s = "abc";
if(s.equals("abc")) {
throw new NumberFormatException();
} else {
System.out.println(s);
}
}
int div(int a,int b) throws Exception{
return a/b;
}
try catch捕获异常
Throw和Throws区别
位置
throw new NumberFormatException();
int div(int a,int b) throws Exception{
功能
- (1)
throw抛出具体的问题对象
,执行到throw,功能就已经结束了,跳转到调用者,并将具体的问题对象抛给调用者。throw语句独立存在时,不要定义其他语句,因为执行不到。 throws用来声明异常
,让调用者只知道该功能可能出现的问题,可以给出预先的处理方式 - (2)
throw是抛出了异常
,执行throw则一定抛出了某种异常对象。throws表示出现异常的一种可能性
,并不一定会发生这些异常。 - (3)两者都是消极处理异常的方式,只是抛出或者可能抛出异常,但是
不会由函数去处理异常
,真正的处理异常由函数的上层调用处理。