《异常捕获及处理》

在学习《异常处理》这章的时候,寝室的问我这样的问题:用以前的判断语句也可以异常,为什么需要异常处理?似乎这章的内容是无用的。我当时学的不深所以没法回答这个问题。
      今天再回顾这章知识,觉得是很有必要的。
      回答之前的问题:
      判断语句当然可以捕捉程序中的异常,但需要大量的判断语句,并且不能捕捉所有错误,而且还会导致程序的运 行效率降低。
       而Java的异常处理机制为复杂的程序提供了强有力的控制方式:易于使用、可自行定义异常类,处理异常时不会降低程序运行效率。同时这些处理异常的代码与”常规“代码的分享,增强了程序的可读性。


面试问题:

1、异常类Throwable的继承结构

Excption

Error表示JVM错误,应用程序对此无能为力,开发时不予关注。

eg:

(1).OutOfMemoryError代表JVM的堆空间耗尽

(2).UnknowError代表Java虚拟机中出现一个未知但严重的异常。


2、Java的异常处理机制
答:我把这过程比作”警察处理犯错的罪犯“(或处理女朋友发脾气)
(1)一旦产生异常,则首先会产生一个异常类的实例化对象(这是犯错后产生罪犯)
(2)在try语句中对此异常对象进行”审问“(警察审问过程)
(3)产生异常对象与catch语句中的各个异常类型进行匹配,如果匹配成功,则执行catch语句中的代码。(根据相应法律执行制裁)
3、异常捕获和处理策略
捕获:

  • 从方法的使用者角度声明对使用者有意义的异常
  • 何时抛出异常--在所设计的方法遇到不能处理的非正常情形下,应当声明抛出异常。
  • 声明抛出”超级异常“对方法使用者是毫无用处的,而且会导致极差的代码风格。
  • 一般不声明超过3个的异常。
  • 不声明所有可能的异常,要尽可能的将“低级异常”映射成“高级异常”。
将异常组织成一个对象树结构,有利于保持方法定义的完整性。
处理:
  • 尽可能只捕获指定的异常,而不是捕获多个异常的公共父类,除非确信这个异常的所有子类对程序是没有差别的。
  • 重构代码时,仔细观察因为代码的改变而变得多余的catch子句。

4、可不可以直接使用Throwable?
答:不建议使用的,最大只能捕获Exception(Error本身不需要程序处理).当然在代码上是没有任何问题的。
5、throw 和 throws关键字的区别

答:
throws用在方法声明处,表示本方法不处理异常,但要上报,调用时必须进行异常处理。
throw表示在方法中手工抛出一个异常
6、Exception类与RuntimeException类(运行时异常)的区别

Exception在程序中必须使用try……catch进行处理
RuntimeException可能在任何正常的操作中被抛出,可以不使用try……catch进行,但是如果有异常产生将由JVM进行处理,会导致程序中断执行。

你能举例么?eg:

(1).NullPointerException表示试图引用null对象的方法或属性

(2).IndexOutOfBoundException表示数组越界的异常。在C语言中是不会出现的特性,往往会造成严重的难以发现的漏洞。

注意点:
1、Java中所有捕获范围不的异常必须放在捕获范围大的异常之前,否则程序在编译时会出现错误提示。
2、掌握throw和throws的应用代码结构形式
3、自定义异常类只需要继承Exception类

4、断言assert可以用来检测程序的执行结果,但在开发中不提倡使用断言进行检测
5、Java 7中异常捕获的新特性: 多重捕捉(Mlti-catch) 更精确判断重抛(More-precise-rethrow)


----世界上最真情的相依,是你在try我在catch。无论你发神马脾气,我都默默承受,静静处理。到那时,再来期待我们的finally。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值