第七章 异常

学习路线

异常概述

这种在运行时出现的意外错误称为“异常”

异常类 

Java中的异常类可以分为两种:

错误(Error):一般指与虚拟机相关的问题,如系统崩溃、虚拟机错误、动态链接失败等,这些错误无法恢复或捕获,将导致应用程序中断;

异常(Exception):因程序编码错误或外在因素导致的问题,这些问题能够被系统捕获并进行处理,从而避免应用程序非正常中断,例如:除以0、对负数开平方根、空指针访问等。

Exception异常从编程角度又可以分为以下两种类型:

非检查型异常:编译器不要求强制处置的异常,该异常是因编码或设计不当导致的,这种异常可以避免,RuntimeException及其所有子类都属于非检查型异常

检查型异常:编译器要求及其子类(RuntimeException及其子类除外)都属于检查型异常必须处理的异常,该异常是程序运行时因外界因素而导致的,Exception 

 

检查型异常体现了Java语言的严谨性,程序员必须对该类型的异常进行处理,

否则程序编译不通过,无法运行。

RuntimeException及其子类都是Exception的子类,

Exception是所有能够处理的异常的父类。

Java提供的异常处理机制有两种:

使用try…catch捕获异常:将可能产生异常的代码放在try语句中进行隔离,如果遇到异常,程序会停止执行try块的代码,跳到catch块中进行处理。

使用throws声明抛出异常:当前方法不知道如何处理所出现的异常,该异常应由上一级调用者进行处理,可在定义该方法时使用throws声明抛出异常。 

 Java中捕获异常并处理的语句有以下几种:

  • try…catch语句
  • try…catch…finally语句
  • 自动关闭资源的try语句
  • 嵌套的try…catch语句
  • 多异常捕获

  try…catch语句 

示例

所有异常对象都包含以下几个常用方法用于访问异常信息:

  • getMessage()方法:返回该异常的详细描述字符串;
  • printStackTrace()方法:将该异常的跟踪栈信息输出到标准错误输出;
  • printStackTrace(PrintStream s)方法:将该异常的跟踪栈信息输出到指定输出流;
  • getStackTrace()方法:返回该异常的跟踪栈信息。

 

try…catch…finally语句

在Java异常处理机制中,提供了finally块,可以将回收代码放入此块中,

不管try块中的代码是否出现异常,也不管哪一个catch块被执行,甚至在try块或catch块中执行了return语句,

finally块都会被执行

Java垃圾回收机制不会回收任何物理资源,垃圾回收机制只能回收堆内存中对象所占用的内存。在Java程序中,通常使用finally回收物理资源

1、try块是必需的,catch块和finally块是可选的,但catch块和finally块二者至少出现其一,也可以同时出现,即有两种形式的用法:

2、try…finally和try…catch…finally;

3、try…catch…finally是语句的顺序不能颠倒,所有的catch块必须位于try块之后,finally块必须位于所有的catch块之后。 

示例 

在程序的catch块中①处有一条return语句,该语句强制方法返回。通常程序执行到return语句时会立即结束当前方法,但现在会在返回之前先执行finally块中的代码。 zkl.txt (系统找不到指定的文件。)

执行finally块里的资源回收!

将①处的return语句注释掉,取消②处的代码注释,使用System.exit(0)语句退出整个应用程序。因应用程序不再执行,finally块中的代码不执行 

 

自动关闭资源的try语句

从Java 7开始,增强了try语句的功能,允许在try关键字后紧跟一对小括号,在小括号中可以声明、初始化一个或多个资源,当try语句执行结束时会自动关闭这些资源

示例

上述代码try关键字后紧跟一对小括号,在小括号中声明并初始化一个文件输入流,try语句会自动关闭该资源,这种写法既简洁又安全。

只有JDK版本是7.0或以上,才能使用自动关闭资源的try语句

 嵌套的try…catch语句

使用嵌套的try…catch语句时,如果执行内部的try块没有遇到匹配的catch块,则将检查外部的catch块。

多异常捕获

从Java 7开始,一个catch块可以捕获多种类型的异常

  • 捕获多种类型的异常时,多种异常类型之间使用竖杠“|”进行间隔;
  • 多异常捕获时,异常变量默认是常量,因此程序不能对该异常变量重新赋值。

 

抛出异常

Java中抛出异常可以使用throw或throws关键字:

  • 使用throw抛出一个异常对象:当程序出现异常时,系统会自动抛出异常,除此之外,Java也允许程序使用代码自行抛出异常,自行抛出异常使用throw语句完成;
  • 使用throws声明抛出一个异常序列:throws只能在定义方法时使用。当定义的方法不知道如何处理所出现的异常,而该异常应由上一级调用者进行处理,可在定义该方法时使用throws声明抛出异常。

 

抛出异常序列

自定义异常

自定义异常类都继承Exception或RuntimeException类

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值