JAVA 异常处理

来源:互联网 发布:java httpclient 保持 编辑:程序博客网 时间:2024/05/29 14:34

异常处理格式

在Java 中使用 try....catch 进行异常的处理


try{
    可能出现异常的语句
}catch(异常类 异常对象){
    异常处理
}catch(异常类 异常对象){
    异常处理
}catch(异常类 异常对象){
    异常处理
}。。。
finally{
    异常的出口;
}



package org.exceptiondemo;public class ExceptionDemo02 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubint i = 10;int j = 0;System.out.println("******* 计算开始 *******");try{System.out.println("计算结果:"+i/j);}catch(ArithmeticException e){System.out.println("出现了数学异常:"+e);}System.out.println("******* 计算结束 *******");}}



package org.exceptiondemo;public class ExceptionDemo01{/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubint i = 10;int j = 0;System.out.println("******* 计算开始 *******");try{System.out.println("计算结果:"+i/j);}catch(ArithmeticException e){System.out.println("异常原因:"+e);}finally{System.out.println("不管是否有异常,我都执行");}System.out.println("******* 计算结束 *******");}}


package org.exceptiondemo;public class ExceptionDemo02{/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubint i = 0 ;int j = 0;System.out.println("******* 计算开始 *******");try{i = Integer.parseInt(args[0]);j = Integer.parseInt(args[1]);System.out.println("计算结果:"+i/j);}catch(ArithmeticException e){System.out.println("出现了数据学异常:"+e);}catch(NumberFormatException e){System.out.println("输入的不是数字:"+e);}catch(ArrayIndexOutOfBoundsException e){System.out.println("输入的参数个数不对:"+e);}finally{System.out.println("不管是否有异常,我都执行");}System.out.println("******* 计算结束 *******");}}

那么寻于本程序来讲,实际上还是有可能出现其他异常的。


异常处理流程

1. 对于java 来讲,每当程序中出现了异常,实际上都是产生了一个异常类的实例化对象

这种处理格式实际上非常类似于方法传参,只要参数类型匹配了,则就可以使用此catch进行处理


实际上异常处理的最大父类:Throwable,但是一般开发中不会使用此种方式处理,因为其下有两个子类

Error: Error 一般表示JVM错误,与程序无关

Exception:一般指的是程序中的错误,所以一般开发中如果要想进行程序的处理,其本上是使用此类表示.


一般来讲在程序捕获的时候不要出现Throwable,因为表示的范围太大了


package org.exceptiondemo;public class ExceptionDemo02{/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubint i = 0 ;int j = 0;System.out.println("******* 计算开始 *******");try{i = Integer.parseInt(args[0]);j = Integer.parseInt(args[1]);System.out.println("计算结果:"+i/j);}catch(ArithmeticException e){System.out.println("出现了数据学异常:"+e);}catch(NumberFormatException e){System.out.println("输入的不是数字:"+e);}catch(ArrayIndexOutOfBoundsException e){System.out.println("输入的参数个数不对:"+e);}catch(Exception e){System.out.println("其它异常:"+e);}finally{System.out.println("不管是否有异常,我都执行");}System.out.println("******* 计算结束 *******");}}

但是,在异常捕获的时候,有一个注意:捕获更细的异常需要放在捕获更粗的异常之前


package org.exceptiondemo;public class ExceptionDemo02{/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubint i = 0 ;int j = 0;System.out.println("******* 计算开始 *******");try{i = Integer.parseInt(args[0]);j = Integer.parseInt(args[1]);System.out.println("计算结果:"+i/j);}catch(Exception e){System.out.println("出现了数据学异常:"+e);}finally{System.out.println("不管是否有异常,我都执行");}System.out.println("******* 计算结束 *******");}}


throws 关键字

在程序的方法声明处可以使用throws 关键字,使用此关键字的最大好处:在方法中不处理任何的异常,而交给被调用处处理。


package org.exceptiondemo;class Math{public int div(int i,int j)throws Exception{ int temp = i/j; return temp;}}public class ExceptionDemo03 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubMath mt = new Math();try{mt.div(10, 0);}catch(Exception e){System.out.println("异常:"+e);                        //e.printStackTrace(); 异常明细                }}}


package org.exceptiondemo;class Math{public int div(int i,int j)throws Exception{ int temp = i/j; return temp;}}public class ExceptionDemo03 {/** * @param args */public static void main(String[] args) throws Exception {// TODO Auto-generated method stubMath mt = new Math();mt.div(10, 0);}}
如果在主方法处使用了throws 关键字的话,则所有的异常交给最大的头:JVM进行处理


throw 关键字

在程序中可以使用throw 关键字人为抛出一个异常

在异常的处理中,实际上每次产生异常的时候都是产生了一个异常类的实例化对象。那么此时,也可以通过抛出异常对象的方式完成。


package org.exceptiondemo;public class ExceptionDemo04 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubtry{throw new Exception("抛着玩"); //人为抛出}catch(Exception e){e.printStackTrace();}}}


异常的标准格式

进入方法执行计算前要有输出

此方法执行完之后也要有输出

如果有异常,则交给被调用处处理


package org.exceptiondemo;class Math1{public int div(int i,int j)throws Exception{int temp = 0; System.out.println("计算前显示-------------"); try{ temp = i/j; }catch(Exception e){ throw e; }finally{ System.out.println("计算后显示-------------"); } return temp;}}public class ExceptionDemo05 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubMath1 mt = new Math1();try{System.out.println(mt.div(10,0));}catch(Exception e){e.printStackTrace();}}}


自定义异常

一个类只要继承了Exception则就表示一个自定义异常,当发现系统中提供的异常不够的时候就可以这样做


package org.exceptiondemo;class MyException extends Exception{public MyException (String msg){super(msg);}}public class MyExceptionDemo01 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubtry{throw new MyException("自定义异常");}catch(Exception e){e.printStackTrace();}}}


原创粉丝点击