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 ...
随机推荐
- 徐州网络赛F-Feature Trace【暴力】
Morgana is learning computer vision, and he likes cats, too. One day he wants to find the cat moveme ...
- Apache POI 读写 Excel 文件
目录 写入 Excel 文件 读取 Excel 文件 遍历 Excel 文件 需要的 maven 依赖 完整代码 写入 Excel 文件 // 写入 Excel 文件 // ============= ...
- python调用C++之pybind11入门(相互调用)
python调用C/C++有不少的方法,如boost.python, swig, ctypes, pybind11等,这些方法有繁有简,而pybind11的优点是对C++ 11支持很好,API比较简单 ...
- django的cache
使用文件缓存 #settings.py CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.F ...
- 三个在线django速成教程(转)
add by zhj: 除了这几个在线的,有些书也不错 1. Two Scoops of Django 2. Instant Django 1.5 Application Development St ...
- 【云安全与同态加密_调研分析(8)】同态加密技术及其应用分析——By Me
◆同态加密技术(Homomorphic Encryption, HE)及其应用◆ ◆加密方案◆ ◆应用领域◆ ◆厂商◆ ◆同态加密现有产品形态和工程实现◆ ◆参考链接◆ ◆备注(其他参考信息)◆ 同态 ...
- CentOS 7 SSH 免密登录的方法
先决条件 3 台 CentOS 7 HOSTNAME IP ROLE server1 10.8.26.197 Master server2 10.8.26.196 Slave1 server3 10. ...
- (转)通过HTTP RESTful API 操作elasticsearch搜索数据
样例数据集 这是编造的JSON格式银行客户账号信息文档,文档schema如下: { “account_number”: 0, “balance”: 16623, “firstname”: “Brads ...
- pyenv常用命令
pyenv使用教程 安装 Mac brew install pyenv brew install pyenv-virtualenv 配置 echo 'eval "$(pyenv init - ...
- c++11 类默认函数的控制:"=default" 和 "=delete"函数 void fun() = default; void fun()=delete;
转自:lsgxeva #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #includ ...