Java中的异常处理
Java中的异常处理
一、异常简介
1.定义:程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。
2.异常结构图及分类
2.1按照Java中异常的顶层父类Throwable类划分
2.1.1Error:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理----通过代码无法处理
2.1.2Exception:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心—通过代码可以处理
2.2按照运行—编译划分
2.2.1运行时异常:可以通过编译,包括RuntimeException的异常
2.2.2编译时异常:不能通过编译,包括Error及除RuntimeException以外的异常
二.Java中的异常处理手段—针对运行时异常
1使用try…catch…finally语句块处理
1.1基本用法
try{
可能发生异常的代码
注意:1.如果没有异常直接去执行finally代码块
2.如果发现异常,则去匹配catch中代码块,如果在catch中未匹配到处理该异常代码块,则程序直接去执行finally代码块,然后抛出异常,从发生异常的代码语句处停止运行程序
}catch(异常类型+变量){
匹配某类异常,根据需求可视化异常
注意:1.一个catch代码块只捕获一种类型的异常
2.一个try…catch…finally语块可以有多个catch语句块,用 来捕获不同类型的异常
3.如果没有捕获到任何异常,所有的catch语句块将被忽略
} finally {
收尾善后性质的代码
注意:1. 一个try至少要有一个catch块,否则,至少要有1个finally块
2. 当至少有一个catch块时,finally块可以没有
3.无论是否发生异常,finally块中的代码都会执行
}
1.2注意事项
1.2.1try块、catch块、finally块三者之中的局部变量不共享
1.2.2多个catch块中捕获的异常会存在父子类关系,应先将子类放在前面,父类放在后面,保证每个catch出现的意义,否则父类已经捕获的异常,子类是捕获不到的
2使用throws声明异常
2.1基本用法
2.1.1原理:如果一个方法内部的代码会抛出异常,而方法自己又没有完全处理掉,则javac保证你必须在方法的签名上使用throws关键字声明这些可能抛出的异常,否则编译无法通过
2.1.2与try…catch…finally比较:throws仅仅声明异常,并不捕获处理,而是把异常交给调用方法的人处理,可以根据一层一层反给调用方法的人
三.throw关键字
1.定义:throw是用来抛出异常的,后面必须跟一个异常对象
2.使用:throw必须在方法内部使用,执行throw的地方就是一个异常抛出点,它和由JRE自动形成的异常抛出点没有任何差别
四.自定义异常
1.定义:根据实际需求,自己定义的异常,根据自定义异常的类型继承Java提供的异常类
2.自定义异常包含的构造方法
2.1无参数构造方法
2.2带String参数的构造方法,并传递给父类的构造方法
2.3带String参数和Throwable参数的构造方法,并传递给父类构造方法
2.4带Throwable参数的构造方法,并传递给父类构造方法
***对于finally和return的小总结:
1.finally会中的return会覆盖try
或者catch中的返回值
- finally中的return会导致catch块中的异常无法抛出,直接返回finally中的返回值
***常见笔试题
如下方法,最后此方法的返回值是几?
答案是:2
public int get(){
try{
System.out.println(10/0);
return
1;
}catch(Exception e){
System.out.println("捕获异常");
}finally{
}
return 2;
}