处理异常
在Java之中如果要进行异常的处理,可以使用:try、catch、finally这几个关键字来完成,其基本的处理结构如下:
try{
//可能出现异常的语句
}[catch(异常类型 异常对象){
//异常处理
}catch(异常类型 异常对象){
//异常处理
}catch(异常类型 异常对象){
//异常处理
}catch(异常类型 异常对象){
//异常处理
}...][finally]{
不管是异常是否处理都要执行;
}
在此格式之中可以使用的组合为:
- try…catch
- try…catch…finally
- try…finally
范例:处理异常
class JavaDemo
{
public static void main(String[] args)
{
System.out.println("【1】程序开始执行");
try{
System.out.println("【2】数值计算:"+10/0);
}catch(ArithmeticException e){
System.out.println(e);//处理异常
}
System.out.println("【3】程序执行完毕");
}
}
结果:
【1】程序开始执行
java.lang.ArithmeticException: / by zero
【3】程序执行完毕
此时可以发现现在几遍出现了异常,程序也可以正常执行完毕,所以此时的设计属于一个合理设计,但是有一个问题:此时在进行异常处理的时候直接输出的是一个异常类的对象,那么对于此对象如果直接打印(调用toString())所得到的异常信息并不完整,那么如果想获得非常完成的异常信息,则可以使用异常类中提供的printStackTrace()方法完成
范例:获取完整异常信息
class JavaDemo
{
public static void main(String[] args)
{
System.out.println("【1】程序开始执行");
try{
System.out.println("【2】数值计算:"+10/0);
}catch(ArithmeticException e){
e.printStackTrace();//处理异常
}
System.out.println("【3】程序执行完毕");
}
}
结果:
【1】程序开始执行
java.lang.ArithmeticException: / by zero
at JavaDemo.main(认识异常对程序的影响.java:7)
【3】程序执行完毕
对于异常的处理格式也可以在最后追加有一个finally程序块,表示异常处理后的出口,不管异常是否处理都执行。
范例:使用finally语句
class JavaDemo
{
public static void main(String[] args)
{
System.out.println("【1】程序开始执行");
try{
System.out.println("【2】数值计算:"+10/0);
}catch(ArithmeticException e){
e.printStackTrace();//处理异常
}finally{
System.out.println("不管是否出现异常我都会执行");
}
System.out.println("【3】程序执行完毕");
}
}
结果:
【1】程序开始执行
java.lang.ArithmeticException: / by zero
at JavaDemo.main(认识异常对程序的影响.java:7)
不管是否出现异常我都会执行
【3】程序执行完毕
此时程序中有异常执行finally,就算没有异常也会执行finally。