java基础总结(面试高频问题)八:java的异常机制及分类

1:什么是异常:
异常就是程序在运行期间发生了错误,这个错误阻碍了程序的执行,这就是异常;
2:异常如何解决:
java提供了异常处理机制,专门应用于解决程序运行时发生的异常;当异常发生时,会按照代码中预先设定的异常处理逻辑,有针对性的处理异常,让程序可以恢复正常并继续运行;
3:异常分类:
首先需要知道,Java标准库内建了一些通用的异常,这些类以Throwable为顶层父类。Throwable又派生出Error类和Exception类。所有的异常类都是从 java.lang.Exception 类继承的子类。
Throwable类包含错误(Error)和异常(Exception)两个子类:
(1)错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注以Exception为父类的分支下的各种异常类。
(2)异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。
异常(Exception类)的分类:
(1)非检查异常(unckecked exception):Error 和 RuntimeException 以及他们的子类。javac在编译时,不会提示和发现这样的异常,不要求程序处理这些异常。所以如果愿意,我们可以编写代码处理(使用try…catch…finally)这样的异常,也可以不处理。对于这些异常,我们应该修正代码,而不是去通过异常处理器处理 。这样的异常发生的原因多半是代码写的有问题。如:将0作为被除数造成的错误ArithmeticException,强制类型转换错误ClassCastException,数组索引越界ArrayIndexOutOfBoundsException,使用了空对象NullPointerException等等。
(2)检查异常(checked exception):除了Error 和 RuntimeException的其它异常。javac强制要求程序员为这样的异常做预备处理工作(使用try…catch…finally或者throws)。在方法中要么用try-catch语句捕获它并处理,要么用throws语句声明抛出它,否则编译不会通过。这样的异常一般是由程序的运行环境导致的。因为程序可能被运行在各种未知的环境下,而程序员无法干预用户如何使用他编写的程序,于是程序员就应该为这样的异常时刻准备着。如SQLException , IOException,ClassNotFoundException 等。
(3)异常图
在这里插入图片描述

4:异常的处理方法:
(1)使用try…catch…finally语句块处理它:
finally块不管异常是否发生,只要对应的try执行了,则它一定也执行。只有一种方法让finally块不执行:System.exit()。因此finally块通常用来做资源释放操作:关闭文件,关闭数据库连接等等。
良好的编程习惯是:在try块中打开资源,在finally块中清理释放这些资源
(2)使用throws 声明交给函数调用者去解决:
throws声明:如果一个方法内部的代码会抛出检查异常(checked exception),而方法自己又没有完全处理掉,则javac保证你必须在方法的签名上使用throws关键字声明这些可能抛出的异常,否则编译不通过。
throws是另一种处理异常的方式,它不同于try…catch…finally,throws仅仅是将函数中可能出现的异常向调用者声明,而自己则不具体处理。
采取这种异常处理的原因可能是:方法本身不知道如何处理这样的异常,或者说让调用者处理更好,调用者需要为可能发生的异常负责。
5:自定义异常:
如果要自定义异常类,则扩展Exception类即可,因此这样的自定义异常都属于检查异常(checked exception)。如果要自定义非检查异常,则扩展自RuntimeException。
6:finally注意事项:
(1)在 try块中即便有return,break,continue等改变执行流的语句,finally也会执行;
(2)finally中的return 会覆盖 try 或者catch中的返回值;
(3)finally中的异常会覆盖前面try或者catch中的异常;
总结:
不要在fianlly中使用return;
不要在finally中抛出异常;
减轻finally的任务,不要在finally中做一些其它的事情,finally块仅仅用来释放资源是最合适的;
尽量将所有的return写在函数的最后面,而不是try … catch … finally中;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值