14、ThinkInJava(java编程思想)第十二章 通过异常处理错误 笔记

  • Java的基本理念是“结构不佳的代码不能运行”
  • 改进的错误恢复机制是提供代码健壮性的最强有力的方式
  • java使用异常来提供一致的错误报告模型,使得构件能够与客户端代码可靠的沟通问题
  • 异常处理是java唯一正式的错误报告机制

12.1 概念

  • 用强制规定的形式来消除错误处理过程中随心所欲的因素
  • 它能够降低错误处理代码的复杂度

12.2 基本异常

  • 异常情形是指阻止当前方法或者作用域继续执行的问题
    除法是一个非常典型简单的例子,除数可能为0,所以先进行检查很有必要,假使这是一个意料之外的值,你也不清楚该如何处理,那就要抛出异常,而不是顺着原来的路径继续执行下去。

  • 异常最重要的方面之一就是如果发生问题,他们将不允许程序沿着其正常的路径继续走下去。

12.2.1 异常参数

  • 与使用java中其他对象一样,我们总是用new在堆上创建异常对象,这也伴随着存储空间的分配和构造器的使用。
    所有标准异常类都有两个构造器:
    一个是默认构造器;
    另一个是接受字符串作为参数,以便能把相关信息放入异常对象的构造器。

  • 错误信息可以保存在异常对象内部或者异常类的名称来暗示,上一层环境通过这些信息来决定如何处理异常。(通常,异常对象中仅有的信息就是异常类型,除此之外不包含任何有意义的内容)

12.3异常捕获在这里插入代码片

12.3.1 try块

try{
//Code that might generate exception
}

这意味着代码将个容易编写和阅读,因为完成任务的代码没有与错误检查的代码混在一起

12.3.2 异常处理程序

每个catch子句(异常处理程序)看起来就像是接收一个且仅接收一个特殊类型的参数的方法。

终止和恢复
异常处理中理论上有两种基本类型:
java支持终止模型(常用);
另一种是恢复模型;

12.4 创建自定义异常

java中已经有无数的异常类型,但是我们还是会要用到自定义的异常类

  • 最简单方法时让编译器为你产生默认构造器,这样不用写多少代码,也就是自定义异常类继承exception类即可,调用默认构造器;(编译器创建了默认构造器,它将自动的调用基类的默认构造器)
    对异常来说,最重要的部分就是类名,所以创建调用基类默认构造器的异常类就够用了。

  • 可以增加一个调用带string 参数的构造器,使用super关键字调用基类构造器,它接受一个字符串作为参数,在异常报错信息中会跟在异常类后面当做更详细的异常提示;
    printStackTrace()方法,是Throwable类声明的方法,Excption继承他,自定义类继承Exception,所以这个方法也被自定义类所使用,它的作用便是:将打印“从方法调用出直到异常跑出处”的方法调用顺序。(异常报错信息都是这么显示的)
    e.printstrackTrace();则信息将被输出到标准的错误流。

12.4.1 异常与日志记录

12.5 异常说明

  • java鼓励人们把方法可能会抛出的异常告知使用此方法的客户端程序员。
  • 在方法参数前用throws来说明方法中存在的异常

12.6 捕获所有的异常

Exception是所有异常类的基类,所以将捕获所有异常,最好把它放在处理程序列表的末尾,以防止抢在其他处理程序之前先把异常捕获了。

12.6.1 栈轨迹

栈:顾名思义有栈的特性,如子弹上膛先进后出

printStrackTrace()方法所提供的信息可以通过getStackTrace()方法来直接访问,这个方法将返回一个由栈轨迹中的元素组成的数组,每个元素表示栈中的一帧,如从main()方法开始知道报错的具体方法,这过程的所有方法都将组成栈元素;

Java标准异常

Throwable这个Java类被用来表示任何可以作为异常被抛出的类。
子类有两种:Error(表示编译时和系统错误)和Exception(是可以被抛出的基本类型)
java程序员关系的基类型通常是Exception.

  • 对于异常来说,关键是理解概念以及如何使用;

  • 异常的基本概念是用名称代表发生的问题。并且异常的名称应该可以望文知意。

12.7.1 特例 RuntimeException

运行时异常,他们会自动被java虚拟机抛出,如空指针异常和数组下标越界异常,这些都是继承自运行时异常,不需要我们去捕获和处理;
如果不捕获的话,运行时异常直达main(),程序在退出前将调用异常的printStackTrace()方法。(栈轨迹)

运行时的异常代表的是编程错误:
1、无法预料的错误,比如外界传进来的null
2、作为程序员,应该在代码中进行检查的错误,(如数组下标越界异常,就得注意一下数组的大小了)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值