异常处理是java中唯一正式的错误报告机制。

而且通过编译器强行运行。

异常參数

抛出异常与方法正常返回值的差别:异常返回的“地点”与普通方法调用返回的"地点"全然不同。(异常将在一个恰当的异常处理程序中得到解决,他的位置可能离异常被抛出的地方非常远,也可能会跨越方法调用栈的很多层次。)

对异常来说,最重要的部分就是类名。

捕获异常

异常处理理论上有两种模型:终止模型和恢复模型。java支持终止模型。对于恢复模型。因为其紧耦合程度太高,所以能够用行不大。

在异常处理程序中,Throwable类声明(Exception即从此类继承)的printStackTrace()方法,默认将信息输出到标准错误流,也可通过加參数改变输出流。如:e.printStackTrace(system.out); 信息被输出到标准输出流。

异常与记录日志

随时记录程序的日志是个好习惯。java中能够用静态的Logger.getLogger()方法获得日志记录的对象。

又一次抛出异常

重抛异常会把异常抛给上一级环境中的异常处理程序,同一个try块的兴许catch子句将被忽略。假设仅仅是把当前异常对象又一次抛出,那么printStackTrace()方法显示的是原来异常抛出点的调用栈信息,而非又一次抛出点的信息。想要更新这个信息,能够调用fillInStackTrace()方法。这将返回一个Throwable对象。

如:

throw (Exception)e.fillInStackTrace();

有可能在异常捕获之后抛出还有一种异常。这么做得到的效果类似使用fillInStackTrace().有关原来异常发生点的信息会丢失。剩下的是新的抛出点信息。

异常链

在捕获一个异常后抛出还有一个异常。而且希望把原始异常的信息保存下来,这被称为异常链。全部的Throwable的子类在构造器中都能够接受一个cause对象作为參数。这个cause就用来表示原始异常,这样就能够把原始异常传递给新的异常,是的即使在当前位置创建并抛出了新的异常。也能通过这个异常链追踪到异常的最初发生位置。

在Throwable的子类中,仅仅有三个主要的异常类提供了带cause參数的构造器,他们是Error(java虚拟机报告系统错误),Exception,以及RuntimeException。假设要把其它类型的异常链接起来,应该使用initCause()方法而不是构造器。

java标准异常

Throwable类对象能够分为两种类型:Error用来表示编译时和系统错误;Exception是能够被抛出的基本类型。在java类库/用户方法以及执行时故障中都可能抛出Exception。所以我们关系的基类型一般是Exception。

请务必记住:仅仅能在代码中忽略RuntimeException(及其子类)类型的异常,其它类型异常的处理都是由编译器强制实施的。

究其原因。RuntimeException是编程错误:

  1. 无法预料的错误。比方在你控制范围内引入null引用。
  2. 应该在代码中检查的错误。

    如数组越界訪问。

缺憾:异常丢失

例如以下样例所看到的:

public void main(String [] args)
{
try{
throw new RuntimeException();
}finally{
return;
}
}

该方法直接通过finally将异常淹没了。造成了异常丢失。

异常的限制

当覆盖方法的时候,仅仅能抛出在基类方法的异常说明里列出的那些异常。这意味着。当基类使用的代码应用到其派生类对象时,一样可以工作

异常限制对构造器不起作用

子类构造器能够抛出不论什么异常,而不必理会基类构造器所抛出的异常。然而。积累的构造器必须以这样或那样的方式调用(被自己主动调用),派生类构造器必须包括基类构造器的异常说明

派生类构造器不能捕获基类构造器抛出的异常。

虽然在继承过程中,编译器会对异常说明做强制要求,但异常说明本身并不属于方法类型的一部分。

方法类型是由方法的名字和參数的类型组成的。因此,不能基于异常说明来重载方法。

[think in java]第12章 通过异常处理错误的更多相关文章

  1. 《Java编程思想》笔记 第十二章 通过异常处理错误

    1.异常也是对象 标准异常类都有两个构造器,一个默认,一个接受字符串. 抛异常与方法返回类型不同,但有相似效果使当前方法退出并返回,抛异常可以看作是一种不同的返回机制.(异同点不必深究) Throwa ...

  2. java编程思想读书笔记 第十二章 通过异常处理错误(下)

    1.异常的限制 当覆盖方法的时候,仅仅能抛出在基类方法的异常说明里列出的那些异常. 这意味着,当基类使用的代码应用到其派生类对象的时候,一样能够工资,异常也不例外. 以下的样例是在编译时施加在异常上面 ...

  3. Java第12章笔记

    如何定义 Java 中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 一般情况下,定义一个方法的语法是: 其中: //方法名为骆驼命名法 1. 访问修饰符:方法允许被访问的权 ...

  4. Java核心技术卷一基础知识-第12章-泛型程序设计-读书笔记

    第12章 泛型程序设计 本章内容: * 为什么要使用泛型程序设计 * 定义简单泛型类 * 泛型方法 * 类型变量的限定 * 泛型代码和虚拟机 * 约束与局限性 * 泛型类型的继承规则 * 通配符类型 ...

  5. 深入理解java虚拟机-第12章Java内存模型与线程

    第12章 Java内存模型与线程 Java内存模型  主内存与工作内存: java内存模型规定了所有的变量都在主内存中,每条线程还有自己的工作内存. 工作内存中保存了该线程使用的主内存副本拷贝,线程对 ...

  6. 设计模式之第12章-享元模式(Java实现)

    设计模式之第12章-享元模式(Java实现) “怎么回事,竟然出现了OutOfMemory的错误.鱼哥,来帮我看看啊.”“有跟踪错误原因么?是内存泄露么?”“不是内存泄露啊,具体原因不知道啊.对了,有 ...

  7. Linux就这个范儿 第12章 一个网络一个世界

    Linux就这个范儿 第12章 一个网络一个世界 与Linux有缘相识还得从一项开发任务说起.十八年前,我在Nucleus  OS上开发无线网桥AP,需要加入STP生成树协议(SpanningTree ...

  8. 一大波Java来袭(二)异常处理

    概要解析: 本章的知识点能够记为:1图+5keyword+先逮小的.后逮大的  一.基础 (一)定义 1.异常 是指在程序执行的时候发生的一些异常事件.良好的程序设计应该在异常发生的时候提供处理异常的 ...

  9. Hadoop专业解决方案-第12章 为Hadoop应用构建企业级的安全解决方案

    一.前言: 非常感谢Hadoop专业解决方案群:313702010,兄弟们的大力支持,在此说一声辛苦了,春节期间,项目进度有所延迟,不过元宵节以后大家已经步入正轨, 目前第12章 为Hadoop应用构 ...

随机推荐

  1. Java.HttpClient绕过Https证书解决方案二

    方案2 import java.io.*; import java.net.URL; import java.net.URLConnection; import java.security.Secur ...

  2. Centos7.5 在桌面创建AndroidStudio快捷方式

    Centos7 在桌面创建AndroidStudio快捷方式 前言 最近安装了Centos7,打算将开发平台转移到Linux下,安装好AndroidStudio后,桌面没有快捷方式有些不习惯,随自己创 ...

  3. [PHP][学习笔记][CURL]监测设备运行情况小demo

    1.curl获取的web content 不能直接echo到页面,会造成js各种错误 2.想办法处理字符串的截取.拼接 2.1.裁剪html返回的字符串 function cutStringFrom( ...

  4. Assembly之Instruction之Byte and Word

    Byte and word issues The MSP430 is byte-addressed, and little-endian. Word operands must be located ...

  5. iOS-如何返回某个字符串的拼音助记码

    我也是看了网上的一个示例代码后,在它的基础上进行的修改.因为项目上会用到,我相信很多人的项目上也会用到.所以实现后,也赶紧分享出来,希望后来人不需要花费时间了. 提示:这里用到了正则表达式,使用了一个 ...

  6. appium处理app与web页面的转换

      测微信页面的时候使用谷歌app,进入微信页面的链接 def setUp(self): print("set up env for android testing...") se ...

  7. python核心编程中的对象值比较VS对象身份比较(转载)

    转载地址: https://blog.csdn.net/Mluka/article/details/51076786 在python核心编程第四章中,P69在优化下面这段代码时提出了:对象值比较VS对 ...

  8. MySQL--增删改查分页存储过程以及事务

    添加和修改写在一起了 可以用id判断添加和修改 和事务在一起编码 可以让代码更严谨 在这里简单的说一下事务的四大特性 事务四大特性之原子性:原子性是指事务是一个不可再分割的工作单位,事务中的操作要么都 ...

  9. 小程序text组件内部上边距的问题

    index.wxml: <view class="slogan"> <text> 建立跨文化的全球视野,做世界公民 </text> </v ...

  10. 用Python来实现斐波那契数列.

    1).递归 def fib_recur(n): assert n >= 0, "n > 0" if n <= 1: return n return fib_rec ...