• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

java的异常与处理机制分析【附面试题】

java 搞代码 4年前 (2022-01-09) 25次浏览 已收录 0个评论

本文实例讲述了java的异常与处理机制。分享给大家供大家参考,具体如下:

java的异常机制

Throwable类

Throwable类是Java异常类型的顶层父类,一个对象只有是 Throwable 类的(直接或者间接)实例,他才是一个异常对象,才能被异常处理机制识别。JDK中内建了一些常用的异常类,我们也可以自定义异常。

Throwable又派生出Error类和Exception类。

错误:Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。

异常:Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。

java异常体系结构

Java中的异常分为两大类(根据javac对异常的处理要求):

Checked exception(受检异常):除了Error 和 RuntimeException的其它异常。受检异常表示程序本身没有问题,但由于I/O、网络、数据库等其他不可预测的错误导致的异常,也可能是因为资源耗尽导致的异常。javac强制要求程序员为这样的异常做预备处理工作(使用try…catch…finally或者throws)。在方法中要么用try-catch语句捕获它并处理,要么用throws子句声明抛出它,否则编译不会通过。这样的异常一般是由程序的运行环境导致的。因为程序可能被运行在各种未知的环境下,而程序员无法干预用户如何使用他编写的程序,于是程序员就应该为这样的异常时刻准备着。如SQLException , IOException,ClassNotFoundException 等。

Unchecked exception(Runtime Exception)(未受检异常):Error 和 RuntimeException 以及他们的子类。未受检异常一般认为是代码的逻辑问题,一般需要修改代码来解决异常,也可以使用异常机制处理。这样的异常发生的原因多半是代码写的有问题。如除0错误ArithmeticException,错误的强制类型转换错误ClassCastException,数组索引越界ArrayIndexOutOfBoundsException,使用了空对象NullPointerException等等。

Runtime Exception类直接继承自Exception类,Java中所有的运行时异常都会直接或间接地继承自Runtime Exception

Java中凡是继承自Exception,而不是继承自Runtime Exception类的异常都是Checked Exception

异常处理的基本语法

在编写代码处理异常时,对于检查异常,有2种不同的处理方式:使用try…catch…finally语句块处理它。或者,在函数签名中使用throws 声明交给函数调用者caller去解决。

(1)try…catch…finally语句块

try{
   //try块中放可能发生异常的代码。
   //如果执行完try且不发生异常,则接着去执行finally块和finally后面的代码(如果有的话)。
   //如果发生异常,则尝试去匹配catch块。
}catch(SQLException SQLexception){
  //每一个catch块用于捕获并处理一个特定的异常,或者这异常类型的子类。Java7中可以将多个异常声明在一个catch中。
  //catch后面的括号定义了异常类型和异常参数。如果异常与之匹配且是最先匹配到的,则虚拟机将使用这个catch块来处理异常。
  //在catch块中可以使用这个块的异常参数来获取异常的相关信息。异常参数是这个catch块中的局部变量,其它块不能访问。
  //如果当前try块中发生的异常在后续的所有catch中都没捕获到,则先去执行finally,然后到这个函数的外部caller中去匹配异常处理器。
  //如果try中没有发生异常,则所有的catch块将被忽略。
}catch(Exception exception){
  //...
}finally{
  //finally块通常是可选的。
  //无论异常是否发生,异常是否匹配被处理,finally都会执<span>本文来源gaodai#ma#com搞*!代#%^码$网*</span>行。
  //一个try至少要有一个catch块,否则, 至少要有1个finally块。但是finally不是用来处理异常的,finally不会捕获异常。
//如果在try或者catch语句中存在return语句,则return语句会在finally语句执行结束后执行,但是finally并不能改变返回值。
//如果在finally语句中也有return,那么try和catch中的return语句会丢失,实际会返回finally中的返回值。
 //finally主要做一些清理工作,如流的关闭,数据库连接的关闭等。
}


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:java的异常与处理机制分析【附面试题】

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址