随笔分类 -  Java 通过异常处理错误信息

摘要:应该在以下情况使用异常: 1.)在恰当的级别处理问题.(在知道如何处理的情况下才捕获异常) 2.)解决问题并且重新调用异常的方法 3.)进行少许的修补,然后绕过异常发生的地方继续执行 4.)用别的数据进行计算,以代替预计返回的值 5.)把当前运行环境下能做的事情尽量做完,然后把相同的异常重新抛到高层 阅读全文
posted @ 2019-01-22 14:27 江期玉 阅读(152) 评论(0) 推荐(0) 编辑
摘要:一.当我们不知道该怎么处理这个异常,但是也不想把它"吞"了,或者打印一些无用的信息,可以使用异常链的思路解决.可以直接报"被检查的异常"包装进RuntimeException里面,就像这样: 这种技巧给了你一种选择,你可以不写try-catch子句或异常说明,直接忽略异常,让它自己沿着调用栈往上冒泡 阅读全文
posted @ 2019-01-22 13:27 江期玉 阅读(1032) 评论(0) 推荐(0) 编辑
摘要:最简答而又不用写多少代码就能保护异常信息的方法,就是把它们从main()传递到控制台,对于简单的程序可以像这样: 通过把它传递到控制它这里就不必写try-catch子句了. 阅读全文
posted @ 2019-01-22 13:13 江期玉 阅读(469) 评论(0) 推荐(0) 编辑
摘要:异常起源于PL/1和Mesa之类的系统中. 1.) 不在于编译器是否会强制程序员去处理错误,而是要由一致的,使用异常来报告错误 2.) 不在于什么时候进行检查,而是一定要有检查. 阅读全文
posted @ 2019-01-22 13:10 江期玉 阅读(192) 评论(0) 推荐(0) 编辑
摘要:异常处理的一个原则时,只有当你在知道如何处理的情况下才捕获异常,异常处理的一个重要目标时将错误处理代码同错误发生的地点相分离. "被检查异常"强制你在还没准备好处理错误的时候被迫加上catch子句,这就导致了吞食则有害的问题.异常被吞食了. 阅读全文
posted @ 2019-01-22 13:05 江期玉 阅读(192) 评论(0) 推荐(0) 编辑
摘要:抛出异常的时候,异常处理系统会安装代码书写顺序找出"最近"的处理程序. 找到匹配的程序后,它就认为异常将得到清理,然后就不再继续查找. 查找的时候并不要求抛出的异常同处理程序的异常完全匹配.派生类的对象也可以配备其基类的处理程序 换句话说,捕获基类的异常,就可以匹配所有派生类的异常 阅读全文
posted @ 2019-01-22 13:01 江期玉 阅读(597) 评论(0) 推荐(0) 编辑
摘要:有一点很重要,即你要时刻询问子句"如果异常发生了,所有东西能被正确清理码?",尽管大多数情况下时非常安全的,但涉及到构造器时,问题出现了,构造器会把对象设置成安全的初始状态,但还会又别的动作,比如打开一个文件,这样的动作只有在对象使用完毕并且用户调用了特殊的清理方法之后才能得以清理,如果在构造器内抛 阅读全文
posted @ 2019-01-22 12:41 江期玉 阅读(1375) 评论(0) 推荐(0) 编辑
摘要:一. 1.) 在覆盖方法的时候,只能抛出在基类方法的异常说明里列出的那些异常 2.) 在基类构造器声明的异常,在子类必须抛出,子类的构造器可以抛出任何异常,但是必须抛出基类构造器的异常 3.) 在基类和接口方法声明的异常,子类覆盖的方法可以不抛出基类和接口方法声明的异常以外的异常,但可以少或不抛出 阅读全文
posted @ 2019-01-22 02:06 江期玉 阅读(559) 评论(0) 推荐(0) 编辑
摘要:一.java的异常实现也是又缺陷的,异常作为程序出错的标志决不能被忽略,但它还是可能被轻易地忽略.下了可以看到前一个异常还没处理就抛出下一个异常,没有catch捕获异常,它被finally抛出下一个异常所取代 二.在finally中加入return语句,没有用catch语句捕获异常,下面这种情况编译 阅读全文
posted @ 2019-01-21 14:47 江期玉 阅读(128) 评论(0) 推荐(0) 编辑
摘要:一.使用finally进行清理 对于一些代码,可能会希望无论try块中的异常是否被抛出,它们都能得到执行,这通常适用于内存回收之外的情况(内存回收由垃圾回收器完成),为了达到这个效果,可以异常处理程序后面加上finally子句,完整的异常处理程序看起来像这样: 为了证明finaly总会被执行,可以试 阅读全文
posted @ 2019-01-21 13:14 江期玉 阅读(1120) 评论(0) 推荐(0) 编辑
摘要:一.Throwable这个Java类被用来表示任何可以作为异常被抛出的类.Throwable对象可分为两种类型(从Throwable继承而得到的类型): 1.) Error用来表示编译时和系统错误 2.) Exception是可以被抛出的基本类型(程序员关系的通常是Exception 二.特例Run 阅读全文
posted @ 2019-01-21 12:18 江期玉 阅读(282) 评论(0) 推荐(0) 编辑
摘要:一.有时希望把刚捕获的异常重新抛出,尤其时在使用Exception捕获所以异常的时候,既然已经得到了对当前异常对象的引用,可以重新把它抛出: 二 : 1.重新抛出异常会把异常抛给上一级环境中的异常处理程序,同一个try块的后续catch字句将忽略. 2.异常对象的所有信息都得以保持,所以高一级环境中 阅读全文
posted @ 2019-01-20 23:02 江期玉 阅读(2060) 评论(0) 推荐(0) 编辑
摘要:1.) 常常会想要在捕获一个异常后抛出另一个异常,并且希望把原始异常的信息保存下来,被称为异常链. 2.)Throwable子类在构造器中可以接受一个cause(因由)对象作为参数.这个cause就是用来表示原始异常,这样通过原是异常传递给新的异常,使得即使在当前位置抛出了新的异常,也能通过异常链追 阅读全文
posted @ 2019-01-20 22:41 江期玉 阅读(403) 评论(0) 推荐(0) 编辑
摘要:printStackTrace()方法所提供的信息可以通过getStackTrace()方法直接访问. getStackTrace()方法返回一个由根轨迹中的元素所构成的数组,每一个元素都表示栈中的一帧,元素0是栈顶元素,并且是调用序列总的最后一个方法调用,数组中最后一个元素和栈底元素是调用序列中的 阅读全文
posted @ 2019-01-20 21:56 江期玉 阅读(272) 评论(0) 推荐(0) 编辑
摘要:1.) 通过捕获异常类型的基类Exception就可以处理所有类型的异常.(事实上还有其它的基类,但Exception是同编程活动相关的基类) 2.)因为Exception是与编程有关的所有异常类的基类,所以捕获包含太多的具体的信息,不过可以调用它从其基类Throwable继承的方法 阅读全文
posted @ 2019-01-20 21:49 江期玉 阅读(2199) 评论(0) 推荐(0) 编辑
摘要:异常说明使用了附加的关键字 throws ,后面接一个所有潜在异常类型的列表,方便客户端程序员查看. 阅读全文
posted @ 2019-01-20 21:10 江期玉 阅读(352) 评论(0) 推荐(0) 编辑
摘要:一. 你可能还想利用java.util.logging工具将输出记录到日志中 二. 尽管LoggingException将所有记录日志的基础设施都构建在了异常自身中,使用它非常方便.但更常见的是我们需要捕获和记录其它人编写的异常, 我们还可以进一步自定义异常,比如加入额外的构造器和成员,因为我们必须 阅读全文
posted @ 2019-01-19 21:40 江期玉 阅读(3329) 评论(0) 推荐(0) 编辑
摘要:java的基本理念是"结构不佳的代码不能够运行" 一.概念 发现错误的理想时机是编译阶段,然而,编译期间并不能找出所有的错误,余下的问题必须在运行时期解决。 二.基本异常 异常情形(exceptional conditin)是指阻止当前方法或作用域继续执行的问题. 普通问题是指在当前环境下能得到足够 阅读全文
posted @ 2019-01-19 18:44 江期玉 阅读(555) 评论(0) 推荐(0) 编辑