java异常处理机制

java的异常处理机制

java对于异常的定义的结构是

Throwable类

派生出两个子类

Error与Exception

|——Error

       系统级别出现的错误,通常是JVM出现的异常,这类错误是程序不可控的。

|——Exception

       程序级别的错误。通常我们称之为异常。这一类问题是可以通过程序解决的。

 

Java中解决异常的步骤:

       发现异常,捕获异常,解决异常。

 

try语句

语法格式:

try{

    //可能出现错误的代码片段

}

catch语句

       用于捕获try中出现的异常,并实现解决方式(要跟try一起使用)

try{

}catch(Exception_type e){

    //解决异常的代码片段

}

 

  catch语句可以出现多次。catch中列举的异常类型应本着子类在先父类在后的原则。

  catch语句要出现在try语句之后。

  try代码块中的内容是在尝试检查这块代码是否有问题,一旦碰到问题程序会立马跳到catch代码块尝试进行恢复或提示该处有异常(问题代码后的其他代码就不执行了)。catch段只有在发生异常时才会执行。

  捕获异常的好习惯,要在最后一个catch中捕获Exception这个异常。

 

  如果try块失败了,抛出异常,流裎会马上转移到catch块,当catch块完成时,会执行finally块。当finally完成时就会继续执行其余的部分。

  如果try块成功,流程会跳过catch块并移动到finally块,当finally完成时就会继续执行其余的部分。

  如果try或catch块有return指令,finally还是会执行!流程会跳到finally然后再回到return指令。

throw语句

主动抛出异常

语法

//e为某个异常的实例

throw e;

 

 

使用throw主动抛异常的情况:

1、分清责任。当调用该方法去处理问题的过程中出现错误,往往我们会将错误抛出,因为调用方有着决策上的权力。我们应当通知在这个环节出现的错误,以便调用方捕获并解决。

2、执行逻辑的过程中,出现了一个符合语法规则但是不符合业务逻辑要求的情况时,我们也可以当作异常去处理,这时我们也会主动抛出一个异常。

throws声明

  throws用于声明方法要抛出的异常类型。

  调用被throws声明的方法时,需要强制捕获该方法声明的抛出的异常。

 

  通常在方法中,我们使用throw主动抛出的异常类型都要声明在throws中。

  只有RuntimeException及其子类异常在throw抛出时,方法不需要将其异常类型定义在throws中。

  RuntimeException及其子类属于非检查异常,指的是编译期间,不检查这类异常的捕获。

常见的RuntimeException子类

NullPointerException:当操作一个空引用时会出现此错误。

NumberFormatException:数据格式转换出现问题时出现此异常。

ClassCastException:强制类型转换类型不匹配时出现此异常。

ArrayIndexOutOfBoundsException:数组下标越界,当使用一个不存在的数组下标时出现此异常。

ArithmeticException:数学运行错误时出现此异常

参看API

 

 

throw与throws的区别?

动作     声明

 

finally块

finally块的语法

finally{

     代码片段

}

  finally块可以出现在try语句块之后,或者最后一个catch语句块之后。且只能出现一次。

  finally块无论程序是否出错,都会执行其内容。无条件一定执行。

  通常,我们的程序中,无论是否报错,都要执行的代码应该放在finally中,保证可以执行到。

 

 

重写方法时的异常处理(父类定义了异常)

  如果在继承一个类时,父类的方法声明了throws抛出指定异常,那么子类在重写该方法时应该注意:

1、可以不指定throws

2、可以throws父类方法异常的子类异常

3、可以throws父类throws的部分异常(例如:父类抛了10个,子类抛8个可以)

不可以的情况:

1、throws父类方法throws的父类异常(爹抛NullPointerException,子不能抛NullPointerException的父类异常)

2、throws父类方法中没有throws的异常

 

posted on 2013-08-31 19:02  提子呀呀  阅读(271)  评论(0编辑  收藏  举报

导航