• 欢迎访问天天编码网站,Java技术、技术书单、开发工具,欢迎加入天天编码
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏天天编码吧
  • 我们的淘宝店铺已经开张了哦,传送门:https://shop145764801.taobao.com/

深入分析Java的异常处理(Exception Handle)机制

Java基础 tiantian 2139次浏览 1个评论 扫描二维码

越来越多的编程语言开始在语言特性方面添加处理项目中错误的机制,在Java语言中,是通过引入一个称为 异常(Exception) 的概念来对应应用程序中的各种错误情况。本文将通过两个示例代码的形式,深入分析Jav中异常处理机制的秘密。其中的一个示例表明:对于可能抛出异常的方法,所有调用者都必须出异常进行处理;另一个示例表明:可以使用父类型去捕获或处理子类型的异常,也就是说异常类型之间一样适用继承机制。

异常体系

模拟现实世界中应用程序的错误类型,Java中提供了两个异常类型:checked exception(检查异常) 和 unchekced exception(非检查异常)。当然,它们同属于Java定义的一套异常体系。下图就是JDK中提供的异常体系结构。

深入分析Java的异常处理(Exception Handle)机制

异常体系中的顶层接口 Throwable 下面有两个子接口,分别是:Error 和 Exception,Error代表的是不可非常严重的错误情况,应用程序几乎不可能再发生错误后进行恢复;Exception代表的是一般的错误情况,应用程序可能可以再错误发生后进行恢复执行。更为重要的是:注意检查异常和非检查异常的处理方式的区别。图中红色标记的都是检查异常,方法内部抛出来的任何一个检查异常都必须捕获处理或者重新声明抛出。检查异常意味着必须在编译时被处理,Java的编译器和JVM需要确保所有的检查异常都得到了合适的处理。图中绿色标记的都是非检查异常,它们不被Java编译器和JVM强制要求解决。这类常见的异常有:空指针(null pointer),除零(divide by 0)等等。

捕获 or 抛出

下面,我们看一个捕获并处理异常的例子。我们需要验证:如果一个异常在某个方法的内部被抛出,那么,不仅该方法本身需要捕获或抛出该异常,而且所有调用该方法的其他方法也必须捕获或抛出该异常。

public class exceptionTest {
private static Exception exception;

public static void main(String[] args) throws Exception {
callDoOne();
}

public static void doOne() throws Exception {
throw exception;
}

public static void callDoOne() throws Exception {
doOne();
}
}

继承关系

父子类型之间的继承关系对于异常类型也是适用的。我们看如下所示的示例代码:

class myException extends Exception{

}

public class exceptionTest {
private static Exception exception;
private static myException myexception;

public static void main(String[] args) throws Exception {
callDoOne();
}

public static void doOne() throws myException {
throw myexception;
}

public static void callDoOne() throws Exception {
doOne();
throw exception;
}
}

这就是为什么一个 catch(Exception e) 能够捕获所以异常的原理。


天天编码 , 版权所有丨本文标题:深入分析Java的异常处理(Exception Handle)机制
转载请保留页面地址:http://www.tiantianbianma.com/java-exception-handle.html/
喜欢 (1)
支付宝[多谢打赏]
分享 (0)
发表我的评论
取消评论

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

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

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. 好深入!!!
    深入分析java等单词的拼写2018-01-15 11:13 回复 Windows 7 | Chrome 63.0.3239.132