黑马程序员_异常及处理

来源:互联网 发布:sql创建存储过程语法 编辑:程序博客网 时间:2024/06/05 15:15

异常及处理

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

    异常:就是不正常,程序在运行时出现的不正常情况,其实就是程序中出现的问题。这个问题按照面向对象思想进行描述,并封装成了对象。因为问题的产生有产生的原因、有问题的名称、有问题的描述等多个属性信息存在。当出现多属性信息最方便的方式就是将这些信息进行封装。异常就是java按照面向对象的思想将问题进行对象封装。这样就方便于操作问题以及处理问题。

    虽然java中有异常处理机制,但是要明确一点,异常就是某种意义上的错误,就是问题,它可能会导致程序失败。之所以java要提出异常处理机制,就是要告诉开发人员,你的程序出现了不正常的情况,请注意。例如:

public class Anomaly

     public int method(int num1int num2){

         //判断除数是否为0

         if (num2 == 0){ 

             throw new IllegalArgumentException(“除数不能为0”)

         }

         return num1/num2

     }

看下这个类中关于除法运算的方法。我们都知道在除法的运算中,除数是不能为0的,如果你在编写程序代码时,没有考虑到这种情况,并且恰巧用户数学基础不好,那么你就完了。但是如果你之前考虑到了这种情况,那么很显然错误已在你的掌控之中。

首先来熟悉一下java的异常体系:

Throwable类是java语言中所有错误或异常的超类。它有两个子类:ErrorException

Error:错误,一般情况下,不编写针对性的代码进行处理,通常是jvm发生的,需要对程序进行修正。

Exception:异常,可以有针对性的处理方式。

在这个体系中的所有类和对象都具备一个独特的特点:可抛性,就是这个体系中的类和对象都可以被throwsthrow两个关键字所操作。在开发时,如果定义功能时,发现该功能会出现一些问题,应该将问题在定义功能时标示出来,这样调用者就可以在使用这个功能的时候,预先给出处理方式。

Java中处理异常的方式有两种:

1、捕捉

       对于捕捉,java有针对性的语句块进行处理。

        try{

          需要被检测的代码

        }

        catch(异常类  变量名){ 

           异常处理代码

        }

        Finally{

           一定会执行的代码

        }

2、抛出

       对于抛出,我们就要用到throwsthrow两个关键字了,那么二者有什么区别呢?

throwsthrow关键字的区别:

   throws:用于抛出异常类,后面跟的是异常类名,可以跟多个,用逗号隔开。throws用在方法上;

   throw:用于抛出异常对象,后面跟的是异常对象。throw用在方法内

通常情况:方法内如果有throw,抛出异常对象,并没有进行处理,那么方法上一定要声明,否则编译失败,但是也有特殊情况。

  异常又分编译时期的异常和运行时期的异常:

      编译时期的异常:在方法内被抛出,方法必须要声明,否则编译失败。声明的原因是需要调用者对该异常进行处理。

      运行时期的异常:在方法内被抛出,在方法上不需要声明。不声明的原因是不需要调用者处理,运行时发生的异常,已经无法再让程序继续运行,所以,不让调用者处理的,直接让程序停止,由调用者对代码进行修正。

   当我们在开发时,项目中可能出现了java中没有定义过的问题时,这时就需要我们按照java异常建立思想,将项目中的特有问题也进行对象的封装,这个异常,称之为自定义异常。

自定义异常的步骤:

   1、定义一个子类继承ExceptionRuntimeException,让该类具备可抛性。

   2、通过throw或者throws进行操作。

在异常中我们要注意一下几点:

1、当子类覆盖父类的方法时,如果父类的方法抛出了异常,那么子类的方法要么不抛出异常,要么抛出父类异常或该异常的子类,不能抛出其他异常;

2、如果父类抛出了多个异常,那么子类在覆盖时只能抛出父类的异常的子集。

3、如果父类或者接口中的方法没有抛出异常,那么子类是不可以抛出异常的,如果子类覆盖的方法中出现了异常,只能try不能throws。当这个异常子类无法处理时,已经影响了子类方法的具体运算,这时可以在子类方法中,通过throw抛出RuntimeException异常或者其子类,这样,子类的方法上是不需要throws声明的。

常见异常:1、角标越界异常(IndexOutOfBoundsException

          2.、空指针异常(NullPointerException

          3、类型转换异常(ClassCastException

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

 

0 0
原创粉丝点击