什么是异常处理
- 异常是指程序在运行过程中发生的非正常情况,当程序违反
java
语言的语义约束时,java
虚拟机会将此错误作为异常信号传递给程序
异常体系
java
语言的错误和异常都是Throwable类的子类或其子类的表示,只有作为此类(或其子类)实例的对象由java虚拟机
抛出Throwable
类的的两个派生类Errow类
:表示程序无法恢复的严重的错误或恢复起来比较麻烦的错误。eg:内存溢出、动态链接失败Exception
类:由java程序抛出和处理的非严重错误
异常分类
- 不受检查异常(uncheckedException):包括RuntimeException及其所有子类对这类异常不要求强制处理
- 检查时异常也称设计时异常(checkedException):值除了不受检查异常外所有继承自Exception的异常,这类异常要求在代码中显示处理
异常类名 | 异常分类 | 说名 |
Exception | 设计时异常 | 异常层次结构的根类 |
IOException | 设计时异常 | IO异常的根类,属于非运行时异常 |
FileNotFoundException | 设计时异常 | 文件操作时,找不到文件 |
RuntimeException | 运行时异常 | 运行时异常的根类,不要求必须处理 |
ArithmeticException | 运行时异常 | 算数异常的根类,比如除数为0 |
IllegalArgumentException | 运行时异常 | 方法接收到非法参数 |
ArrayIndexOutOfBoundException | 运行时异常 | 数组越界访问 |
NullPointerException | 运行时异常 | 尝试访问null对象时发生的空指针异常 |
ArrayStoreException | 运行时异常 | 数组元素类型不匹配 |
ClassCastException | 运行时异常 | 类型转换异常 |
IllegalThreadStateException | 运行时异常 | 试图非法改变线程状态 |
NumberFormatException | 运行时异常 | 数据格式异常 |
异常处理关键字
throw
throws(在方法名后面使用)
throw
:关键字用于手动抛出异常throws
:关键字在方法名之后使用,在方法申明指定可能抛出的异常
例如:
class kiana {
public static void main(String[] args) {
int[] arr = queues();
arr[11] = 100;
//输出Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 11 out of bounds for length 10
}
public static int[] queues() throws ArrayIndexOutOfBoundsException {
return new int[10];
}
}
try,catch,finally
- try语句块中包含了可能产生异常的代码块只能包含一个,必须出现
- catch语句可以包含多个进行异常处理可以没有
- finally语句块存在时必须执行
例如:
class kiana {
public static void main(String[] args) {
int num = queues();
System.out.println(num);
}
public static int queues() {
try {
int s = 5 / 0;
System.out.println(s);
return 1;
} catch (ArithmeticException ex) {
System.out.println("qq");
return 0;
} finally {
System.out.println("hh");
return -1;
}
}
}
//输出是qq
// hh
// -1
由这段代码可以看出只要存在finally语句在执行完代码之前一定会执行该语句块中的语句
每一个异常都是一个类,在catch语句中的异常类后面的就是他的对象
异常可以在构造方法中使用吗?
答案:可以,不过在构造方法中抛出异常时,如果类型为uncheckedException不受检查异常时,其在子类中构造中不必申明该异常类型
如果如checkedException受检查异常则,必须要在子类中申明该异常的类型,可以扩大。
目前就这么多,持续更新…