美文网首页
Java异常

Java异常

作者: bfx1000 | 来源:发表于2018-08-23 10:04 被阅读0次

我是搬运工:http://www.importnew.com/26613.html

Java异常的分类

例子:除数为零的异常


解释:

异常线程 “main” 计算异常:/ 除数为零

在 com.example.AllDemo 类下 devide 方法 (AllDemo.java 文件第 30 行) 异常抛出点
在 com.example.AllDemo 类下 CMDCalculate 方法 (AllDemo.java 文件第 22 行)
在 com.example.AllDemo 类下 main 方法(AllDemo.java 文件第 12 行)

异常处理的基本语法

对于检查异常,有2种不同的处理方式:
1、try…catch…finally语句
2、使用 throws 声明交给函数调用者去解决

处理方法一:try…catch…finally语句块

try{
   // try块中放可能发生异常的代码
}catch(Exception1 e1){
   // 处理方法 1
}catch(Exception2 e2){
    // 处理方法 2
}finally{
    // 无论是否异常,最后都执行
}

需要注意的地方:

1、try 块中的局部变量、catch 块中的局部变量(包括异常变量)、finally 中的局部变量,他们之间不可共享。如果 try 中没有发生异常,则所有的 catch 块将被忽略

2、如果当前 try 块中发生的异常在后续的所有 catch 中都没捕获到,则先去执行 finally,然后到这个函数的外部 caller 中去匹配异常处理器

3、catch 块,异常匹配是按照 catch 块从上往下寻找的,只有第一个匹配的 catch 会得到执行。匹配时,不仅运行精确匹配,也支持父类匹配。因此,如果同一个 try 块下的多个catch异常类型有父子关系,应该将子类异常放在前面,父类异常放在后面,这样保证每个 catch 块都有存在的意义

4、finally 主要做一些清理工作,如流的关闭,数据库连接的关闭等

处理方法二:throws 与 throw

throws: 当调用者调用带有异常声明的方法时,需要对异常进行处理

public void foo() throws ExceptionType1 , ExceptionType2 ,ExceptionTypeN{ 
     //foo内部可以抛出 ExceptionType1 , ExceptionType2 ,ExceptionTypeN 类的异常
    //或者他们的子类的异常对象。
}

throw: 程序员也可以通过throw语句手动显式的抛出一个异常,throw语句的后面必须是一个异常对象

public void save(User user){
      if(user  == null) 
          throw new IllegalArgumentException("User对象为空");
      //......
}

异常的注意事项

1、当子类重写的父类的带有 throws 声明的函数时,子类 throws 声明的异常必须在父类异常的可控范围内——用于处理父类的 throws 方法的异常处理器,必须也适用于子类的这个带throws方法 。这是为了支持多态

例如,父类方法 throws 的是2个异常,子类就不能 throws 3个及以上的异常。父类 throws IOException,子类就必须 throws IOException 或者 IOException 的子类。

2、finally 块和 return
在 try块中即便有 return,break,continue 等改变执行流的语句,finally 也会执行。如果 finally 中有 return,finally 的返回值会覆盖 try 或者catch中的返回值

建议:

不要在 finally 中使用 return;
不要在 finally 中抛出异常;
减轻 finally 的任务,不要在finally中做一些其它的事情,finally块仅仅用来释放资源是最合适的;
将尽量将所有的return写在函数的最后面,而不是 try … catch … finally 中

相关文章

网友评论

      本文标题:Java异常

      本文链接:https://www.haomeiwen.com/subject/hiqpiftx.html