黑马程序员_笔记十_异常的捕获及处理

----------android培训java培训期待与您交流!----------
 

异常的基本概念

异常是导致程序中断运行的一种指令流,如果部队异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失。在java中一切的异常都秉着面向对象的设计思想,所有的异常类都以类和对象的形式存在,除了java中已经提供的各种异常类外,用户也可以根据需要定义自己的异常类

 

代码实例--认识异常

public class Demo{

    public static void main(String args[]){

        System. out.println("**********计算开始 ***********") ;

         int i = 10;        //定义整型变量

         int j = 0;         //定义整型变量

         int temp = i / j ;  //此处产生了异常

        System. out.println("两个数字相除的结果:" + temp) ;

        System. out.println("**********计算结束 ***********") ;

    }

};

结果:

********** 计算开始 ***********

Exception in thread "main" java.lang.ArithmeticException: / by zero

     attest.Demo.main( Demo.java:7)

以上程序中,因为被除数为0,所以程序中出现了一场。从运行结果可以发现,如果不对异常进行处理,则一旦出现了异常后,程序就立刻退出,所以后面的2条语句并没有打印出信息。。

 

在程序中使用异常处理

异常处理格式

try{

编写异常的处理语句

}catch(异常类异常对象)finally{

一定会运行到的程序代码}

 

对异常进行捕捉

代码实例

public class Demo{

    public static void main(String args[]){

        System. out.println("**********计算开始 ***********") ;

         int i = 10;        //定义整型变量

         int j = 0;         //定义整型变量

         try{

             int temp = i / j ;  //此处产生了异常

            System. out.println("两个数字相除的结果:" + temp) ;

            System. out.println("----------------------------" ) ;

        } catch(ArithmeticException e){

            System. out.println("出现异常了:" + e) ;

        }

        System. out.println("**********计算结束 ***********") ;

    }

};

 

结果:**********计算开始 ***********

出现异常了: java.lang.ArithmeticException: / by zero

********** 计算结束 ***********

上述代码中加入了异常处理,所以当有异常发生时,整个程序也并不会因为异常的产生而中断执行。

 

验证finally关键字

public class Demo{

    public static void main(String args[]){

        System. out.println("**********计算开始 ***********") ;

         int i = 10;        //定义整型变量

         int j = 0;         //定义整型变量

         try{

             int temp = i / j ;  //此处产生了异常

            System. out.println("两个数字相除的结果:" + temp) ;

            System. out.println("----------------------------" ) ;

        } catch(ArithmeticException e){  //捕获算术异常

            System. out.println("出现异常了:" + e) ;

        } finally{   //作为异常的统一出口,无论如何都会执行此代码

            System. out.println("不管是否出现异常,都执行此代码" ) ;

        }

        System. out.println("**********计算结束 ***********") ;

    }

};

结果:

********** 计算开始 ***********

出现异常了: java.lang.ArithmeticException: / by zero

不管是否出现异常,都执行此代码

********** 计算结束 ***********

 

异常类的继承结构

在整个java的异常结构中,实际上有2个最常用的类,分别为ExcetionError,这2个类都是Throwable类的子类

Throwable

        |------>Exception

       |------>Error

Exception:一般表示的是程序中出现的问题,可以直接使用try。。。catch处理

Error:一般指的是JVM错误,程序中无法处理

 

java的异常处理机制

在整个java的异常处理中,实际上也是按照面向对象的方式进行处理,步骤如下

1产生一个异常类的实例化对象
2
try语句中对此异常对象进行捕捉
3
产生的异常对象与catch语句中的各个异常类进行匹配,如果匹配成功,则执行catch语句中的代码

 

代码实例

public class Demo{

    public static void main(String args[]){

        System. out.println("**********计算开始 ***********") ;

         int i = 0 ;     //定义整型变量

         int j = 0;         //定义整型变量

         try{

            Stringstr1 = args[0] ;      //接收第一个参数

            Stringstr2 = args[1] ;      //接收第二个参数

            i= Integer. parseInt(str1) ;    //将第一个参数由字符串变为整型

            j= Integer. parseInt(str2) ;    //将第二个参数由字符串变为整型

             int temp = i / j ;  //此处产生了异常

            System. out.println("两个数字相除的结果:" + temp) ;

            System. out.println("----------------------------" ) ;

        } catch(ArithmeticException e){  //捕获算术异常

             // System.out.println("算术异常:" + e) ;

            e.printStackTrace();

        } catch(NumberFormatExceptione){    //捕获数字转换异常

            System. out.println("数字转换异常:" + e);

        } catch(ArrayIndexOutOfBoundsExceptione){ //捕获数组越界异常

            System. out.println("数组越界异常:" + e) ;

        } catch(Exception e){

            System. out.println("其他异常:" + e) ;

        }

        System. out.println("**********计算结束 ***********") ;

    }

};

结果:**********计算开始 ***********

数组越界异常: java.lang.ArrayIndexOutOfBoundsException : 0

********** 计算结束 ***********

ps:一般开发时,不管出现任何异常都可以直接使用Exception进行处理,这样会比较方便

 

throwsthrow关键字

 

throws关键字

在定义一个方法时可以使用throws关键字声明,使用throws声明的方法表示此方法不处理异常,而交给方法的调用处进行处理,throws使用格式如下

public 返回值类型方法名称(参数列表....throws异常类{}

 

代码实例----使用throws关键字

class Math{

    public int div(int i,int j) throws Exception{  //定义除法操作,如果有异常,则交给被调用处处理

        System. out.println("*****计算开始 *****") ;

         int temp = 0 ;  //定义局部变量

         try{

            temp= i / j ;   //计算,但是此处有可能出现异常

        } catch(Exception e){

             throw e ;

        } finally{   //不管是否有异常,都要执行统一出口

            System. out.println("*****计算结束 *****") ;

        }

         return temp ;

    }

};

public class Demo{

    public static void main(String args[]){

        Mathm = new Math() ;

         try{

            System. out.println("除法操作:" + m.div(10,0)) ;

        } catch(Exception e){

            System. out.println("异常产生:" + e) ;

        }

    }

};

 

结果:*****计算开始 *****

***** 计算结束 *****

异常产生: java.lang.ArithmeticException: / by zero

 

 

throw关键字

与与throws不同的是,直接使用throw抛出一个异常,抛出时直接抛出异常类的实例化对象即可。。

代码实例--抛出异常

public class Demo{

    public static void main(String args[]){

         try{

             throw new Exception("自己抛着玩的。") ;    // 抛出异常的实例化对象

        } catch(Exception e){//打印异常信息

            System. out.println(e) ;

        }

    }

};

结果:java.lang.Exception :自己抛着玩的。

 

Exception类与RuntimeException

Exception类在程序中必须使用try....catch进行处理

RuntimeException可以不使用处理,但是如果有异常产生,则异常由jvm处理

Exception

       |_______>>RuntimeException

 

自定义异常类

java中已经提供了大量的异常类,但是这些类有时也很难满足开发的要求,所以用户可以根据自己的需要定义自己的异常类,定义异常类只需要继承Exception类即可

 

class MyException extends Exception{    //自定义异常类,继承Exception

    public MyException(String msg){

         super(msg) ;    //调用Exception类中有一个参数的构造方法,传递错误信息

    }

};

public class Demo{  

    public static void main(String args[]){

         try{

             throw new MyException("自定义异常。") ;     // 抛出异常

        } catch(Exception e){

            System. out.println(e) ;

        }

    }

}

结果:test.MyException :自定义异常。

 

 

小结

 

异常是导致程序中断运行的一种指令流,如果部队异常进行正确的处理,则可能导致程序的中断执行

2 异常可以使用try....catch进行处理,也开始使用try....catch...finally进行处理

3 异常的最大父类是Throwable。其分为2个子类,分别为ExceptionError。。。Exception表示程序处理的异常,而Error表示JVM错误,一般不由程序开发人员处理

4 throws用在方法声明处,表示本方法不处理异常

5 throw表示在方法中手工抛出一个异常



----------android培训java培训期待与您交流!----------
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值