黑马程序员_java的异常机制

来源:互联网 发布:egxige蒙古音乐软件 编辑:程序博客网 时间:2024/05/15 01:29
一、异常 
    异常:就是程序在运行时候出现不正常的情况 
    异常由来:问题也是现实生活中的一个具体事物,也可以通过java对类的形式进行描述,并封装成对象 
            其实就是java对不正常情况进行描述后的对象体现。 
    异常划分:Error和Exception 
        error:对于error一般不编写针对性的代码进行处理 

        exception:对于Exception可以使用针对性的方式进行处理。

 

二、异常的处理 
    try{需要被检测的代码} 
    catch(异常类 变量){处理异常的代码,处理方式}  

    finally{一定会执行的语句}//final中通常用来关闭资源,只有一种情况不会执行,当执行到System.exit(0)时。 


三、对捕获到的异常对象进行常见的方法操作 
    string getMessage():获取异常信息 
    string toString():获取异常名称以及异常信息 

    void printStackTrace():获取异常名称,异常信息和异常出现的位置。JVM默认的异常处理机制。 


四、声明异常:提高安全性 

    throws Exception:若调用者未处理,编译不通过。 


五、多异常处理 
    a声明异常时,建议声明为更具体的异常,这样处理可以更具体。 
    b对方声明几个异常,就对应几个catch块,不要定义多余的catch块。 
    如果多个catch块的异常出现继承关系,父类异常catch块放到最下面。 

    c建议在进行catch处理的时候,catch中一定要有具体的处理方式,不要简单的书写一条输出语句。最好记录到异常日志文件中。 


六、自定义异常:继承Exception 
    因为项目中会出现特有的问题,而这些问题没有被java封装过对象,对这些问题,我们可以按照java的 
    方式对问题进行封装。 
    当在函数内部出现了throw抛出异常时,可以通过内部的try catch处理或者在函数上声明异常让调用者处理。 
    如下例所示 
  
class ZiDingYi extends Exception  {    }    class Demo  {      int fun(int a,int b) throws ZiDingYi      {          if(b<0)              throw new ZiDingYi();//手动通过throw关键字抛出一个自定义的异常对象      }      return a/b;  }
七、自定义异常添加详细异常信息 
    以为父类已经把异常信息的操作都完成了,所以子类在构造时,将异常信息传递给父类的super语句, 

    就可以直接通过getMessage方法获取自定义异常信息。

class ZiDingYi extends Exception  {      ZiDingYi(String msg)      {          super(msg);      }  }    class Demo  {      int fun(int a,int b) throws ZiDingYi      {          if(b<0)              throw new ZiDingYi();//手动通过throw关键字抛出一个自定义的异常对象      }      return a/b;  } 

七、自定义异常继承Exception原因 
    异常体系有一个特点,因为异常类和异常对象都被抛出,他们都具备可平抛性, 
    这个可抛性是Throwable体系中独有的特点,只有这个体系中的类和对象才可 
    被throw和throws操作 


八、throw和throws的区别 
    throws使用在函数上,后面跟异常类,多个用逗号隔开 
    throw使用在函数内,后面跟的是异常对象。

 
九、RuntimeException:Exception的特殊子类 
    a如果在函数内抛出该异常,函数上可以不用声明异常,编译通过。 
    b如果在函数上声明了异常,调用者可以不用进行处理,编译通过。 
    c之所以不用再函数上声明,是因为不需要让调用者处理,当该异常发生时,希望程序停止,因为在 
    运行时,出现了无法继续运算的情况,希望停止程序后对代码进行修正。 
    d自定义异常时,如果该异常发生无法继续进行运算,就让自定义异常继承RuntimeException 


十、覆盖时异常的特点 
    a子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法只能抛出父类的异常或者该异常的子类。 
    b如果父类方法抛出多个异常,那么子类在覆盖方法时,只能抛出父类异常的子集。 
    c如果父类或者接口的方法中没有抛出异常,那么子类覆盖方法时也不能抛出异常。 
        如果子类方法有异常,就必须进行try处理,绝对不能抛。 


十一、异常的好处 
    a将问题进行封装 
    b将正常流程代码和问题处理代码相分离方便阅读。 


十二、异常处理原则 
    a处理方式有两种:try和throws 
    b调用到抛出异常的功能时,抛出几个就处理几个。 
    c多个catch。父类catch放到最下面 
    d catch内需要定义针对性的处理方式,不要简单的写上输出语句也,更不要不写。 

0 0