什么是异常处理
java编程中为了防止出现异常,程序中预先设置好对付异常的处理方法。
java中如何进行异常处理
异常处理通过5个关键字来实现的
try/ catch/ finally/ trow/ throws/
try(执行可能产生异常的代码)
catch(捕获异常)
finally(无论是否发生异常,代码总能执行)
throws(声明方法可能要抛出的各种异常)
throw(手动抛出异常)
使用try-catch块捕获异常,分为三种
第一种请况:try块中所有语句正常执行完毕,不会发生异常,那么catch块中的所有语句
都不会实现。
public void method(){
try{
//代码段(此处不会产生异常)
}catch(异常类型 e){
//对异常进行处理的代码段
}
//代码段
}
第二种请况:try语句块在执行中遇到异常,那么在try块中其余剩下的代码都将不会实现,系统
会自动生成相应的异常对象,如果这个异常对象与catch中声明的异常类型相匹配,则相应的catch
块都会执行。
public void method(){
try{
//代码段1
//产生异常的代码段2
//代码段3
}catch(异常类型 e){
//对异常进行处理的代码段4
}
//代码段5
}
第三种情况:try语句块在执行中遇到异常,如果这个异常对象与catch中声明的异常类型不匹配,
程序会中断。
public void method(){
try{
//代码段1
//产生异常的代码段2
//代码段3
}catch(异常类型 e){
//对异常进行处理的代码段4
}
//代码段5
}
在catch块中处理异常
加入用户自定义处理信息
System.err.println(“出现错误:被除数和除数必须是整数,除数不能为零”)
异常对象常用的方法处理信息
| 方法名 | 说明 |
| void printStackTrace() | 输出异常的堆栈信息 |
| String getMessage() | 返回异常信息描述字符串, 是printStackTrace()输出信息的一部分 |
Error 与Exception 的区别
答:都继承Throwable这个类
Error是java程序在编译阶段出现的问题,代码将无法通过编译。
Exception 是java程序在运行阶段时才出现的问题,能通过编译,但是不能完整运行。
多重catch块一段代码可能会引发多种类型的异常,在上面计算并输出商的实例中,其实至少存在
两种异常情况,输入非整数内容和除数为0,我们统一按照Excption类型捕获。
如果要分别捕获,就可能使用多重catch块。
引发多种类型的异常
排列catch语句的顺序:先子类后父类
发生异常时按顺序逐个匹配
只执行第一个与异常匹配的catch语句
多重catch块
public void method(){
try{
//代码块
//产生异常(异常类型2)
}catch(异常类型1 e){
//对异常进行处理的代码段
}catch(异常类型2 e){
//对异常进行处理的代码段
}catch(异常类型3 e){
//对异常进行处理的代码段
}
//代码段
}
执行顺序:try————(发生异常)————(产生异常对象—)———与异常类型1不匹配————与异常类型2匹配
————(进入catch块)————catch————程序继续执行————try-catch块后的代码块
存在return的try-catch-finally块
try{
//代码块1
//产生异常的代码段2
}catch(异常类型1 e){
//对异常进行处理的代码段3
return;
}finaly{
//代码段4
}
}
try——发生异常1——产生异常对象——异常类型匹配——进入catch2——执行finally块3——return4
面试题:
try-catch块中存在return语句,是否还执行finally块,如果执行,说出执行顺序?
1.执行
2.1.发生异常,进入异常类型匹配,在进入catch块2,在进入finally语句块,最后执行return。
try-catch-finally块中,finally块为不执行的情况是什么?
除非在try块或者catch块中调用了退出虚拟机的方法(即System.exit(1);)
否则不管在try块、catch块中执行怎样的代码,出现怎样的情况,异常处理的finally块总是会被执行的。
声明异常rowspublic class Test{
//方法
public static void divide()throws Exceptior{————> 声明异常,多个异常用逗号隔开
//可能出现异常代码
}
public static void main(String[] args){
try{
//对象调用方法
divide();
}catch(Exception e){————> 方式1:调用者处理异常
e.printStatckTrace();
}
public static void main(String[] args)throws Exception{————>方式2:调用者继续声明异常
//对象调用方法 (main方法声明的异常有Java虚拟机处理)
divide();
}
}
}
面试题
自定义异常
当JDK 中的异常类型不能满足程序的需要时,可以自定义异常类。
使用自定义异常的步骤:
1.定义异常类,
2.编写构造方法,继承父类的实现,
3.实例化自定义异常对象
4.使用throw抛出
继承Throwable 类,继承Excepion或者RuntimeException



