`
piperzero
  • 浏览: 3474704 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

java异常链与异常丢失

 
阅读更多

1、在java的构造方法中提供了 异常链.. 也就是我们可以通过构造方法不断的将 异常串联成一个异常链...

之所以需要异常连,是因为处于代码的可理解性,以及阅读和程序的可维护性...

我们知道我们每抛出一个异常都需要进行try catch ...那么岂不是代码很臃肿...

我们如果可以将异常串联成一个异常连,然后我们只捕获我们的包装 异常,我们知道 RuntimeException 以及其派生类可以不进行try catch 而被jvm自动捕获并处理..

当然了我们可以自己定义自己的异常类从RuntimeException中派生,然后通过一级一级的包装,假如异常出现了JWM通过我们的自定义RuntimeException直接输出 cause

(原因)也就是 我们的异常链..因此我们的所有异常也就输出了,这样就减少了很多的异常处理的代码。。。

只有 Throwable----> Exception RuntimeException Error提供了 构造方法实现异常链的机制。。。其他异常需要通过initCause来

构造异常连..

下面一段代码就是异常连的一个简单示例...可以打印整个程序过程中出现的异常。。

public class TestT {
public static void a() throws Exception{ //抛出异常给上级处理
try {
b() ;
} catch (Exception e) {
throw new Exception(e) ;
}
}
public static void b() throws Exception{ //抛出异常给上级处理
try {
c() ;
} catch (Exception e) {
throw new Exception(e);
}
}
public static void c() throws Exception { //抛出异常给上级处理
try {
throw new NullPointerException("c 异常链中的空指针异常..") ;
} catch (NullPointerException e) {
throw new Exception(e) ;
}
}
public static void main(String[]args){
try {
a() ;
} catch (Exception e) {
e.printStackTrace();
}

}
}

2、 try catch ...finally 有个漏洞就是异常缺失.. 例如三个try catch 嵌套在一起 ..内部的2个try catch 就可以省略 catch ....直接 try finally ..

看下面代码 我们发现丢失了2个异常信息


public class MyTest {
public void open() throws Exception{
throw new Exception(){
public String toString() {
return this.getClass().getName()+"CeryImmportException";
};
} ;
}
public void close() throws Exception{

throw new Exception(){
public String toString() {

return this.getClass().getName()+"close Exception" ;
};
} ;
}
public void three() throws Exception{
throw new Exception(){
public String toString() {

return this.getClass().getName() + "three" ;
};
} ;
}
public static void main(String[]agrs){
MyTest mt=new MyTest() ;
try{
try{
try{
mt.open();
}finally
{
System.out.println("delete open");
mt.close() ;
}
}
finally{
System.out.println("delete close");
mt.three() ;

}
}catch(Exception ex){
ex.printStackTrace();
}
}
}

分享到:
评论

相关推荐

    浅谈java异常链与异常丢失

    下面小编就为大家带来一篇浅谈java异常链与异常丢失。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Java 常用类解析:java异常机制,异常栈,异常处理方式,异常链,异常丢失详解

    主要介绍了Java 常用类解析:java异常机制,异常栈,异常处理方式,异常链,异常丢失详解的相关资料,需要的朋友可以参考下

    Java高级程序设计(第二版)--第2章-异常处理.pptx

    第2章 异常处理 2.1 什么是异常 2.2 处理异常 2.3 自定义异常与throw关键字 2.4 throws关键字 2.5 Java的内置异常 Java高级程序设计(第二版)--第2章-异常处理全文共19页,当前为第2页。 本章目标 理解异常及其作用 ...

    Java异常学习之自定义异常详解

    你的程序总有一天会崩溃掉,在崩溃掉的时候我们要知道它在哪,为了什么而崩溃掉,数据的保存或者...下面这篇文章主要给大家介绍了关于Java异常学习之自定义异常的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。

    java范例开发大全源代码

     第2章 Java基础类型与运算符(教学视频:39分钟) 9  2.1 基础类型 9  实例2 自动提升 9  实例3 自动转换 10  实例4 常用基础类型之强制转换 11  2.2 运算符 12  实例5 算术运算符 12  实例6...

    java范例开发大全

    第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 关系运算符 13 实例7 逻辑...

    Java范例开发大全 (源程序)

     第2章 Java基础类型与运算符(教学视频:39分钟) 9  2.1 基础类型 9  实例2 自动提升 9  实例3 自动转换 10  实例4 常用基础类型之强制转换 11  2.2 运算符 12  实例5 算术运算符 12  实例6 关系...

    java基础学习4—异常

    异常 异常本质上是程序上的错误。 程序中的异常 错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误。 在编译期间出现的错误有编译器帮助...java提供了异常机制来进行处理,通过异常机制,我们可以更

    Java编程艺术 PDF

    图表与Java 222 8.1 样本. 总体. 分布与变量 223 8.2 基本统计值 223 8.2.1 平均数 224 8.2.2 中位数 224 8.2.3 众数 225 8.3 方差和标准差 227 8.4 回归方程式 228 8.5 Stats类的完整代码 232 8.6 绘图数据 235 ...

    Java八股文最新消息中间件面试宝典

    Java面试专题课解决面试过程中的一些常见问题,课程全面覆盖重难点Java面试题。包含了多个模块的面试题讲解,如:Redis、MySQL、框架、微服务、消息中间件、数据结构、Java集合源码分析、多线程、JVM、设计模式、高...

    Java范例开发大全(全书源程序)

    第2章 Java基础类型与运算符 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 关系运算符 13 实例7 逻辑运算符 14 实例8 位运算符 15 实例...

    Java常见面试题208道.docx

    面试题包括以下十九部分:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql...

    java范例开发大全(pdf&源码)

    第2章 Java基础类型与运算符(教学视频:39分钟) 9 2.1 基础类型 9 实例2 自动提升 9 实例3 自动转换 10 实例4 常用基础类型之强制转换 11 2.2 运算符 12 实例5 算术运算符 12 实例6 关系运算符 13 实例7 逻辑...

    Java反编译工具jd-gui

    Java反编译工具: 1. 修复从反编译代码复制内容中文丢失的问题; 2. 修复打开xml文件、properties文件时中文乱码的问题;

    JavaLearning:我对Java的学习

    并说明何时丢失异常javaIO文件IOStream读者作家 Java网络插座多线程如何创建线程同步命令原子操作 NoSQL雷迪斯 SSH协议使用struts2 + spring + hibernate小服务程序在JavaWeb开发中使用Servlet和Tomcat春天IoC / DI...

    java面试题

    这类异常没法要求程序员去一一捕获并抛出,一般异常是Java类库或程序员自己写的代码发生的错误,这类异常可以由我们去一一捕获并抛出。 多线程几种实现方法,同步? 答:多线程有两种实现方法,一种是继承Thread类...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

    第1章 Java应用分层架构及软件模型  1.1 应用程序的分层体系结构  1.1.1 区分物理层和逻辑层  1.1.2 软件层的特征  1.1.3 软件分层的优点  1.1.4 软件分层的缺点  1.1.5 Java应用的持久化层  1.2 软件的模型 ...

    java windows 计时工具

    java虚拟机配置 在默认情况下,程序启动时会使用自身的jre(以下所说的jar为java虚拟机1.6.0以上版本,低版本则无法启动程序)。 在主目录(安装目录、程序所在的目录)的“jre1.6”目录下,如果没有则需要在主目录...

    整理后java开发全套达内学习笔记(含练习)

    注意:默认类型转换(自动类型提升)会丢失精度,但只有三种情况: int>float; long>float; long>double. 看一下他们的有效位就明白。 二进制是无法精确的表示 0.1 的。 进行高精度运算可以用java.math包中...

Global site tag (gtag.js) - Google Analytics