JAVA异常处理机制分析(上)
过去曾有一段时间关于java的异常处理机制曾经让我吃尽苦头,异常机制看似简单,原理,用法也仅仅如此,但是,用起来或是在使用一些框架的时候总会因为使用不当,造成灾难性后果。
jdk异常处理机制
我们可以通过一张图来很直观的展现异常处理的结构关系:
图1 Java异常类层次结构图
Throwable 是异常处理的底层实现类,可以被抛出,当然也可以被抓取处理。所以的其它一些异常处理类都是它的子孙后代。Error 该类以及子类旨在说明发生的具有灾难性后果的事件,就比如说内存错误,是虚拟机发生的重大错误,虚拟机捕获后会终止程序运行。 Exception 程序执行时候发生的异常,是我们经常会打交道的异常处理类,开发者可以基于它做异常扩展也可以做异常转型等。
异常如何使用
对于某个具体步骤所产生的异常,我们一般有两种方式,抓取处理和抛出。所以如何使用要根据具体场景。我们可以推算下这个过程。当程序发生异常时候,正常情况会终止程序的执行,但是,为了可以备选方案,甚至备选方案只是仅仅想打印出异常原因和具体位置。这时候就出现一个问题,这个备选方案在那部分开始实施?而在程序设计上我们以方法作为一个执行的最早过程,所以程序需要考虑的是在这一连串的方法调用中具体在那个方法执行备选方案?这往往跟具体也许要关。异常的抛出就解决了这个问题,我们可以通过抛出异常将异常抛到我们需要可以选择备选方案的地方通过抓取后继续执行,使程序不被终止执行。而这个过程中我们可以通过抓取抛出对异常进行变形来使异常信息可以更加清晰可见,使开发者可以很快追踪到问题所在。
举个例子:
public class Test { public static void testException(){
try {
String name=null;
name.length();
} catch (NullPointerException e) {
throw new MyException("我自己写的异常~");
}finally {
System.out.println("请允许我处理下~");
} } public static void main(String[] args) { try {
testException();
}catch (Exception e){
e.printStackTrace();
} }
}
上面的例子main方法其实抓取的是testException方法抛出的异常,而空指针异常处理了,但是把异常经过变形后抛出了。
使用场景比如:
我有个文件要读取解析,但是做类型解析时候出现类型转换异常,那么上级方法只想捕获异常通过出去是文件内容格式不合法,但是,就可以做异常转型,而对于文件操作我们往往需要进行close所以就可以在finally中释放资源的连接。
JAVA异常处理机制分析(上)的更多相关文章
- java异常处理机制 (转载)
java异常处理机制 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 异常处理是程序设计中一个非常重要的方面,也是程序设计的一大难点,从C ...
- Java异常处理机制 —— 深入理解与开发应用
本文为原创博文,严禁转载,侵权必究! Java异常处理机制在日常开发中应用频繁,其最主要的不外乎几个关键字:try.catch.finally.throw.throws,以及各种各样的Exceptio ...
- 如何正确使用Java异常处理机制
文章来源:leaforbook - 如何正确使用Java异常处理机制作者:士别三日 第一节 异常处理概述 第二节 Java异常处理类 2.1 Throwable 2.1.1 Throwable有五种构 ...
- java异常处理机制详解
java异常处理机制详解 程序很难做到完美,不免有各种各样的异常.比如程序本身有bug,比如程序打印时打印机没有纸了,比如内存不足.为了解决这些异常,我们需要知道异常发生的原因.对于一些常见的异常,我 ...
- JAVA 异常处理机制
主要讲述几点: 一.异常的简介 二.异常处理流程 三.运行时异常和非运行时异常 四.throws和throw关键字 一.异常简介 异常处理是在程序运行之中出现的情况,例如除数为零.异常类(Except ...
- 【转】深入理解java异常处理机制
深入理解java异常处理机制 ; int c; for (int i = 2; i >= -2; i--) { c = b / i; System.out.println("i=&qu ...
- Java异常处理机制的秘密
一.结论 这些结论你可能从未听说过,但其正确性是毋庸置疑的,不妨先看看: 1.catch中throw不一定能抛回到上一层,因为finally中的return会抑制这个throw 2.finally中t ...
- Java异常处理机制及两种异常的区别
java异常处理机制主要依赖于try,catch,finally,throw,throws五个关键字. try 关键字后紧跟一个花括号括起来的代码块,简称try块.同理:下面的也被称为相应的块. ...
- Java 异常处理机制和集合框架
一.实验目的 掌握面向对象程序设计技术 二.实验环境 1.微型计算机一台 2.WINDOWS操作系统,Java SDK,Eclipse开发环境 三.实验内容 1.Java异常处理机制涉及5个关键字:t ...
随机推荐
- 170725、Kafka原理与技术
本文转载自:http://www.linkedkeeper.com/detail/blog.action?bid=1016 Kafka的基本介绍 Kafka最初由Linkedin公司开发,是一个分布式 ...
- MySQL数据的查询注意
mysql数据库的查询结果输出的是一个记录,这一个记录是以字典的形式存储的,所以获取字段时要用字典提取数据的形式获取字段信息: 查询的代码: def query(self): # sql语句 sql ...
- handle exceptions, opening and closing database connections
https://www.tutorialspoint.com/spring/spring_jdbc_framework.htm Spring - JDBC Framework Overview Whi ...
- Database Partitioning Options DATABASE SHARDING
w主写从读.集群节点间时时内存复制.单表横切纵切.分析报表系统通过服务器联表 http://www.agildata.com/database-sharding/ Database Partition ...
- inotify+rsync安装配置
环境 系统 IP地址 主服务器 CentOS7.4 192.168.1.1 备份服务器 CentOS7.4 192.168.1.2 一.备份服务器 安装rsync(备) wget https://rs ...
- toml-lang - Tom's Obvious, Minimal Language
Tom's Obvious, Minimal Languagehttps://github.com/toml-lang/toml
- Romantic---hdu2669(扩展欧几里德模板)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2669 详解:扩展欧几里德 #include <iostream> #include < ...
- Linux常用命令【总结】
Linux命令中文版详解:https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/index.html Linux系统,我用过的有centos和 ...
- Flask系列(七)Flask中的wtforms使用
一.简单介绍flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装: pip3 install wtforms 二.简单使用wtfo ...
- git-flow工作流程
什么是 git-flow? 一旦安装安装 git-flow,你将会拥有一些扩展命令.这些命令会在一个预定义的顺序下自动执行多个操作.是的,这就是我们的工作流程! git-flow 并不是要替代 Git ...