文章目录
一、什么是异常
java中的异常是指Java程序在运行时可能出现的错误或非正常情况。
例:
public class test {
public static void main(String[] args) {
int ret = divide(4,0);
System.out.println(ret);
}
public static int divide(int x,int y){
int n = x / y;
return n;
}
}
二、运行时异常与编译时异常
1、编译时异常
- 在Exception类中,除了RuntimeException类以外,其他子类都是编译时异常。Java编译器会对编译时异常进行检查,如果出现这类异常就必须对其进行处理,否者的话程序无法通过编译。
- 编译异常的处理
(1)、使用 try… catch 语句对异常进行捕获处理。
(2)、使用 throws 关键字声明抛出异常,由调用者对其异常进行处理。
2、运行时异常
- RuntimeException类及其子类都是运行时异常,运行时异常是在程序运行时由Java虚拟机自动进行捕获处理的,Java编译器不会对异常进行检查。
这类异常程序可以通过编译,但是运行中会报错。 - 运行异常分类
运行时异常 | 描述 |
---|---|
ArithmeticException | 算数异常 |
IndexOutOfBoundsException | 索引越界异常 |
ClassCastExceptin | 类型转换异常 |
NullPointerException | 空指针异常 |
NumberForMatException | 数字格式化异常 |
三、异常处理及语法
关键字 | 功能描述 |
---|---|
try | 放置可能引发异常的代码块 |
catch | 后面对应异常类型和一个代码块,该代码快用于处理这种类型的异常 |
finally | 主要用于回收在try代码块里打开的物理资源 |
throw | 用于抛出一个实际异常,它可以单独作为语句抛出来一个具体的异常对象 |
throws | 用在方法签名中,用于声明该方法可能抛出的异常 |
1、try…catch语句
try{
代码块
}catch(ExceptionType e){
e.printStackTrace();
代码块
}
2、finally语句
在程序中,有时候希望一个语句无论程序是否发生异常都要执行,这时可以使用finally。
try{
代码块
}catch(ExceptionType e){
e.printStackTrace();
代码块
}fianlly{
代码块
}
3、throw关键字
- 使用情况
(1)编译异常:
第一:在try代码块里使用throw关键字抛出异常,通过try代码块捕获异常。
第二:在一个有throws声明的方法中使用throw关键字抛出异常,把异常交给该方法 调用者处理。
(2)运行异常:
程序既可以显式使用try…catch语句捕获并处理该异常,也可以把该异常交给方法的调用者处理 - 注意
(1).必须写在方法体的内部。
(2).抛出对象必须是Exception或其子类。
(3).若为RuunTimeException或其子类,可直接交由JVM。
(4).当try当中没有没有抛出异常的时候,检测就会报错。
(5).异常一旦抛出,其后代码不会执行。
4、异常抛出的顺序关系
- try中
同一时间,不会抛出两个及其以上的异常。
try里哪个先抛出异常,先报哪一个,与catch中所写异常的顺序无关 - catch中
catch代码块中抛出Exception,那么需要放在其子类异常的后面,否则会报错。
若Exception被捕获,那么后面的异常就不会有异常了。
5、异常的处理流程
四、自定义异常类
- 自定义异常通常会继承自 Exception 或者 RuntimeException.
- 继承自 Exception 的异常默认是受查异常.
- 继承自 RuntimeException 的异常默认是非受查异常.