1.异常的概述
1.异常的概念:在java程序中,异常是指程序运行的过程中,发生某些意外的事情。比如10/内存溢出等。异常是一个在程序运行执行期间发生的事件,它中断了正在执行的程序的正常交流
2.异常与错误的区别:异常是不正常的事件流,通过处理程序依然可以运行下去。但是错误是无法控制的,程序肯定要中断。
2.异常的体系
1.异常体系图
此图表示的是异常的体系。从图中我们可以看出异常的父类为Throwable.并且异常下又有多种异常。
2.异常的分类:分为运行时异常(RuntimeException)和编译期异常(checkedoutException)。其中常见的RuntimeException的子类包括:NullpointerException、ClassCastException、ArrayindexOutOfBandsException等。而除了RuntimeException外的异常的类都可以统称为checkedoutException。常见的包括SQLException、IOException等。
3.异常的处理
1.在java中,异常的处理常用到的语句结构如下:
try{
可能会发生异常的语句块
}catch(异常类名 引用名){
对该异常的处理
}
【catch1(异常类名1 引用名1){
对该异常的处理
}
catch2(异常类名2 引用名2){
对该异常的处理
}
………………】
【其他代码块】
finally{
语句块
}
2.try-catch语句块
说明:如上所述,当try代码块中的语句发生异常,程序会转到catch代码块逐一执行,当catch代码块执行完之后,将继续执行catch代码块之后的代码。
结论:java的异常处理是结构化的,不会因为一个异常而影响整个程序的运行。
3.finally语句块
完整的异常处理语句一般都含有finally语句,无论程序中异常是否发生,且无论try-catch语句是否顺利执行完毕,都会执行finally语句。
以下几种情况将不执行finally语句块
1.程序所在的线程死亡。即return掉了所有的catch情况。
2.在前面的代码块中使用了System.exit()退出程序。
4.自定义异常
使用java内置的异常类可以描述大部分异常。除此之外,程序员也可以通过继承Exception类来自定义异常类。
程序中自定义异常类大体上分为以下几个步骤:
(1) 创建自定义异常类。
(2) 在方法中通过throw关键字抛出异常对象。
(3) 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句块捕捉并处理,否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
(4) 在出现异常的方法调用者中捕获并处理异常。
即异常可以在本方法中抛出,在调用本方法时解决,但是需要说明异常
例如:
public class ThrowCasecade {
public void m1(){
try {
m2();
} catch (Exception e) {
e.printStackTrace();
}
}
private void m2() throws Exception {
System.out.println("m2");
try {
m3();
} catch (IOException e) {
//转换为特定的异常,以便于上层调用的方法理解该异常
e.printStackTrace();
throw new Exception();
}
}
private void m3() throws IOException {
System.out.println("m3");
m4();
}
private void m4() throws IOException {
System.out.println("m4");
m5();
}
private void m5() throws IOException {
System.out.println("m5");
throw new IOException("文件未找到");
}
public static void main(String[] args) throws IOException {
new ThrowCasecade().m1();
}
}