留意:此时在main函数琅绫擎throwChecked就不消try异常了。
应当在声明办法抛出异常照样在办法中捕获异常?
处理原则:捕获并处理哪些知道若何处理的异常,而传递哪些不知道若何处理的异常
finally关键字包管无论法度榜样应用任何方法分开try块,finally中的语句都邑被履行。在以下三种情况下会进入finally块:
(1) try块中的代码正常履行完毕。
(3) 在try块中履行return、break、continue。
是以,当你须要一个处所来履行在任何情况下都必须履行的代码时,就可以将这些代码放入finally块中。当你的法度榜样中应用了外界资本,如数据库连接,文件等,必须将释放这些资本的代码写入finally块中。
必须留意的是:在finally块中不克不及抛出异常。JAVA异常处理机制包管无论在任何情况下必须先履行finally块然后再分开try块,是以在try块中产生异常的时刻,JAVA虚拟机先转到finally块履行finally块中的代码,finally块履行完毕后,再向外抛出异常。如不雅在finally块中抛出异常,try块捕获的异常就不克不及抛出,外部捕获到的异常就是finally块中的异常信息,而try块中产生的┞锋正的异常客栈信息则损掉了。请看下面的代码:
- Connection con = null;
- try
- {
- con = dataSource.getConnection();
- ……
- }
- catch(SQLException e)
- {
- ……
- throw e;//进行一些处理后再将数据库异常抛出给调用者处理
- }
- finally
- {
- try
- {
- con.close();
- }
- catch(SQLException e)
- {
- e.printStackTrace();
- ……
- }
- }
运行法度榜样后,调用者获得的信息如下
at myPackage.MyClass.method1(methodl.java:266)
应用finally块释放资本
而不是我们期望获得的数据库异常。这是因为这里的con是null的关系,在finally语句中抛出了NullPointerException,在finally块中增长对con是否为null的断定可以避免产生这种情况。
损掉的异常
请看下面的代码:
- public void method2()
- {
- try
- {
- ……
- method1(); //method1进行了数据库操作
- }
- catch(SQLException e)
- {
- ……
- throw new MyException("产生了数据库异常:"+e.getMessage);
- }
推荐阅读
编者按:以前几年,开辟者几乎都邑用到开源。开源现象日益广泛,有赖于业内人士的聪明和尽力。不过,更重要的┞氛样开源本身的优势:可以或许随便马虎整合多种多样的开源解决筹划。在业内>>>详细阅读
本文标题:Java异常的深入研究与分析
地址:http://www.17bianji.com/lsqh/35587.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示