A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ls61532529 中级黑马   /  2014-12-2 23:15  /  1107 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

希望可以帮助一些在异常这个指点上没有太好理解的同学
1:异常(理解)
      (1)异常:就是程序出现的不正常情况。
      (2)异常体系:
           Throwable
                 |--Error 严重的问题,是处理不了的。要改正代码的。
                 |--Exception
非RuntimeException的,是需要处理的。编译期异常。
                      |--RuntimeException 不需要处理的,是需要改代码的。运行期异常。
           举例:
                 Error:
                      地震,海啸一些不可抗力的
                 Exception:
                      感冒了,头疼一些可治愈的
           注意:
                 每种体系的子类都是以父亲的名称作为后缀。
                 XxxError
                 XxxException
      (3)java虚拟机的默认处理方式
           把异常的类名,原因,位置等信息显示在控制台。
           一旦有异常发生,其后的代码不能继续执行。
      (4)异常的解决方案:
           A:自己处理
                 基本格式:
                      try{
                            可能发生异常的代码;
                      }catch(异常类名 变量名){
                            异常的处理代码;
                      }finally{
                            释放资源的代码;
                      }
                 注意:一旦有一次发生,就会立马执行catch里面的代码。
                 变形格式:
                      try...catch
                      try...catch...catch
                      try...catch...catch...finally
                      try...finally
                 
                 JDK7针对多个catch进行了优化:
                      catch(异常1 | 异常2 | 异常3 ... 变量){}
                      注意:这些异常必须是平级关系。
                            try...catch...catch的不同点是
                            JDK7的这种方案是必须平级关系,不能有子父关系。
                            try...catch...catch父亲放最后是可以的。
           B:抛出处理
                 throws关键字在方法上声明(抛出)
           C:到底使用谁?
                 a:能自己处理的尽量自己处理。(建议用try...catch)
                 b:实在不行,你先抛了在说。上就业班我们对异常是进行统一处理的。
                 看到问题,点击鼠标。
可能出现的面试题:
      (5)finally的特点及面试题
           A:特点
                 里面的代码永远会执行。除非前面退出jvmc
           B:面试题
                 a:请说说final,finally,finalize的区别?
                 b:finally里面的代码永远会执行吗?
                 c:假如在catch里面有ruturn,finally里面的代码还能被执行吗?
                   如果能,请问是在return,还是在return?
                   如果你能说在中间,就更好了。
      (6)ExceptionRuntimeException的区别?
           A:Exception编译时期异常,必须处理的。
                     如果在方法上,throws了该类型的异常,将来调用者必须处理。
                     如果在方法内部,throw了该类型的异常,必须在方法上throws该异常。
           B:RuntimeException运行时期异常,是不需要处理的。要改代码的。
                     如果在方法上,throws了该类型的异常,不需要处理。
                     如果在方法内部,throw了该类型的异常,方法上可以throws该异常,也可以不throws该异常。
      (7)throwthrows的用法和区别?
           A:throw
                 用法:用在方法内部,后面跟的是异常对象名称。
                 区别:用throw抛出了编译时期异常,方法上面必须用throws抛出。
                       throw抛出了运行时期异常,方法上面可以不用throws抛出。
           B:throws
                 用法:用在方法声明上,后面跟的是异常类名。
                 区别:用throws在方法上声明了异常,内部可以没有throw

评分

参与人数 1技术分 +1 收起 理由
船长 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
大神         c:假如在catch里面有ruturn,finally里面的代码还能被执行吗?
                   如果能,请问是在return前,还是在return后?
                   如果你能说在中间,就更好了。

这怎么理解?
回复 使用道具 举报
没伞的孩子 发表于 2014-12-3 09:38
大神         c:假如在catch里面有ruturn,finally里面的代码还能被执行吗?
                   如果能,请问 ...

catch中有return,finally中的代码也会执行,finally是一定会被执行的语句,除非catch中System.exit(0);
直接关闭jvm否则他就一定会执行,try执行完毕后catch和finally是一起执行的但是catch的判断一下异常类型,所以finally中的代码会在catch前执行。
回复 使用道具 举报
总结的很详细。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马