当前课程知识点:Java程序设计 > 第五章 输入输出 > 5.1.1-5.1.2-异常处理的概念 > 5.1.1-5.1.2-异常处理的概念
大家好
欢迎回来继续学习
Java语言程序设计
这一节我们来学习
异常处理的概念
什么是异常处理呢
实际上异常处理
就是一种程序的容错机制
当程序在运行过程中
遇到用户或环境的
一些错误的时候
程序要有能力处理这些错误
并且从错误中恢复出来继续执行
如果不能够完全恢复
至少也给用户一个明确的信息
到底发生了什么使程序要停止
并且在程序结束之前
做好一些善后的工作
为此Java里面
有一种异常处理机制
就是专门干这个用的
异常也称为例外
异常对象就是特殊的运行错误对象
在Java中声明了很多异常类
每个异常类
都代表了一种运行错误
类中包含了这个
运行错误的相关信息
以及处理错误的方法
每当Java程序运行过程中
发生一个可识别的
运行错误的时候
系统都会产生一个
相应的异常类对象
也就是我们说的产生一个异常
什么是可识别的运行错误呢
也就是说在Java的类库中
有一个与之相对应的异常类
那么我们就说这个错误
是一个可识别的运行错误
在Java中当出现异常的时候
处理异常的办法有两种
一种是我这个Java程序
就不处理这个异常
但是你不处理不能不理它
你得声明一下
我不处理这种异常
但是我将这个异常抛出
那么整个这个自己的程序
都不处理异常
它会抛出到哪儿去了呢
它就会直接抛出给运行环境了
就是Java虚拟机了
Java虚拟机就会捕获这个异常
给出一些信息然后终止程序
当然更多的时候
我们会用另外一种办法
就是在自己的程序中
捕获异常并且处理异常
Java的异常处理机制有哪些优点
主要是能够将错误处理代码
从常规代码中分离出来
Java将错误按类型和差别分组
这样的话对那些
无法预测的运行式错误
就能进行捕获和处理
用这样的机制就克服了传统方法
它的错误信息有限的这个问题
后面我们会看到要给大家介绍的
就是说我们可以自定义异常类
这样的话就何以扩展错误信息
你需要多少种错误信息
你自己都可以定义
那么发现了异常以后
就把这个错误传播给调用站
可以让上级的调用者模块
来处理这个信息
在Java中根据
错误的严重程度不同
可以分为两类
一类叫做错误这是致命性的
一般来说是程序无法处理
多数情况下无法从错误中恢复
并且继续运行的
那么Error类就是
所有错误类的超类也叫父类
另外一大类称作异常
是非致命性的
我们可以编制程序
去捕获和处理这样的异常
也就是说这些异常
是有希望恢复的
有希望使程序
在恢复了以后继续执行的
Exception类就是所有异常类的
父类也叫超类
那么异常又分成检查型异常
和非检查型异常
非检查型异常
是不希望程序捕获的异常
对于这些异常
我们在方法中不需要声明
编译器也不进行检查
这些检查型异常都继承自RuntimeException
那么为什么不要求捕获和声明呢
首先引发RuntimeException的操作
在Java的应用程序中
可能会频繁出现
比如说如果每次使用对象的时候
都要编写异常处理代码
来检查这个对象是不是空引用
那么整个程序很快
就变成一个庞大的try-catch块了
就太麻烦了
不要求捕获和声明的异常
它表示的问题
可以不一定要作为异常来处理
比如说关于除0的问题
我们可以在程序的逻辑中
直接判断一个除数是否为0
为0的时候如何
而不必非得使用ArithmeticException
而检查型异常
是程序必须要关注的
如果被调用的方法
抛出了一个类型为E的检查型异常
那么它的调用者模块就必须捕获
并且处理这个异常
或者呢也声明继续抛出
抛出这个E类型的异常
或者它的一个超类的异常
对这一点编译器是要进行检查的
这里列出了Java预定义的
一些常见的异常
包括非检查型异常
比如说除0的异常
比如说访问的对象
还没有实例化等等
另外就是检查型的异常
对于检查型的异常
是我们程序必须要处理的
下面一个例题就故意制造了
一个数组越界的异常
我们来看看执行
这个程序会发生什么
现在我们来看一下这个例子
在这里我们定义了
一个String类型的数组greetings然后初始化的值
有三个字符串
那就说明greetings数组
有三个元素
但是接下来在这个while循环中
我们就开始故意制造错误了
我们让循环执行四次
这样在最后一次循环的
循环体里面
访问greetings数组的时候
下标就越界了
那这个下标越界错误
并不是检查型异常
所以我们在这个主方法中
既没有声明抛出这种异常
也没有捕获处理这种异常
那编译的时候也是
并不做强制性的检查
并不要求你要处理
或者是抛出这个异常
但是运行的时候怎么样呢
我们来看运行结果
前三个字符串都很好的输出了
然后实际上这个时候
数组的遍历就应该已经结束了
那么由于我们故意制造错误
让循环进行第四次
所以接下来在第四次循环中
继续尝试去访问
数组的下一个元素
就造成了下标越界
那这个时候Java虚拟机
就会给我们这样的异常错误信息
然后终止程序的执行
这一节我们介绍了
异常处理的基本概念
和一个简单的例子
好
这一节的内容就是这些
-1.0-导学
--1.0-导学
-1.1-Java与面向对象程序设计简介
--第一章 Java语言基础知识--1.1-Java与面向对象程序设计简介
-1.2-基本数据类型与表达式
-第一章 Java语言基础知识--1.2-基本数据类型与表达式
-1.3-数组
--1.3.1-数组
-第一章 Java语言基础知识--1.3-数组
-1.4-算法的流程控制
--第一章 Java语言基础知识--1.4-算法的流程控制
-1.5-第一章小结
-第一章编程练习题
-课件
--外部链接
-Java环境配置、Eclipse使用、Helloworld程序详解
--使用eclipse建立Java项目、编写和运行Java程序
-Java数据类型
--Java整数类型
--Java浮点类型
--数据类型实战
--数据类型转换
--Java强制类型转换精度损失示例与表达式中的数据类型转换
-Java数组
-Java变量
--Java的变量
-命令行参数
--命令行参数的介绍
-2.0-导学
--2.0-导学
-2.1-面向对象方法的特性
--第二章 类与对象--2.1-面向对象方法的特性
-2.2-1-类声明与对象创建
--第二章 类与对象--2.2-1-类声明与对象创建
-2.2-2-数据成员
--第二章 类与对象--2.2-2-数据成员
-2.2-3-方法成员
--第二章 类与对象--2.2-3-方法成员
-2.2-4-包
--2.2-4-包
--第二章 类与对象--2.2-4-包
-2.2-5-类的访问权限控制
--第二章 类与对象--2.2-5-类的访问权限控制
-2.3-1-对象初始化
--第二章 类与对象--2.3-1-对象初始化
-2.3-2-内存回收
--第二章 类与对象--2.3-2-内存回收
-2.4-枚举类
--2.4-枚举类
--第二章 类与对象--2.4-枚举类
-2.5-应用举例
--2.5-应用举例
-2.6-第2章小结
-第二章编程练习题
-课件
--第二章课件
-3.0-导学
--3.0-导学
-3.1.1-3.1.2-类继承的概念和语法
--第三章 类的重用--3.1.1-3.1.2-类继承的概念和语法
-3.1.3-隐藏和覆盖
--第三章 类的重用--3.1.3-隐藏和覆盖
-3.2-Object 类
--第三章 类的重用--3.2-Object 类
-3.3-终结类与终结方法
--第三章 类的重用--3.3-终结类与终结方法
-3.4-抽象类
--3.4-抽象类
--第三章 类的重用--3.4-抽象类
-3.5-泛型
--3.5-泛型
--第三章 类的重用--3.5-泛型
-3.6-类的组合
--3.6-类的组合
-3.7-小结
--3.7-小结
-第三章编程练习题
-课件
--课件
-4.0-导学
--导学
-4.1-接口
--接口
--第四章 接口与多态--4.1-接口
-4.2.1-4.2.2-类型转换
--类型转换
--第四章 接口与多态--4.2.1-4.2.2-类型转换
-4.2.3-方法的查找
--方法的查找
--第四章 接口与多态--4.2.3-方法的查找
-4.3-多态的概念
--多态的概念
--第四章 接口与多态--4.3-多态的概念
-4.4-多态的应用举例
--多态的应用举例
--第四章 接口与多态--4.4-多态的应用举例
-4.5-构造方法与多态性
--构造方法和多态性
--第四章 接口与多态--4.5-构造方法与多态性
-4.6-本章小结
--本章小结
-第四章编程作业
-课件
--课件
-5.0-导学
--5.0-导学
-5.1.1-5.1.2-异常处理的概念
--第五章 输入输出--5.1.1-5.1.2-异常处理的概念
-5.1.3-5.1.5-异常的处理
--第五章 输入输出--5.1.3-5.1.5-异常的处理
-5.2-输入输出流的概念
--输入输出流的概念
--第五章 输入输出--5.2-输入输出流的概念
-5.3.1-写文本文件
--写文本文件
--第五章 输入输出--5.3.1-写文本文件
-5.3.2-读文本文件
--读文本文件
--第五章 输入输出--5.3.2-读文本文件
-5.3.3-写二进制文件
--写二进制文件
--第五章 输入输出--5.3.3-写二进制文件
-5.3.4-读二进制文件
--读二进制文件
-5.3.5-File类
--File类
-5.3.6-处理压缩文件
--处理压缩文件
-5.3.7-对象序列化
--对象序列化
-5.3.8-随机文件读写
--随机文件读写
-5.4-本章小结
--本章小结
-课件
--课件
-6.0-导学
--导学
-6.1-Java集合框架介绍
--第六章 对象群体的组织--6.1-Java集合框架介绍
-6.2-主要接口及常用的实现类
--第六章 对象群体的组织--6.2-主要接口及常用的实现类
-6.3-常用算法
--常用算法
-6.4-数组实用方法
-6.5-基于动态数组的类型(Vector, ArrayList)
--基于动态数组的类型(Vector, ArrayList)
-6.6-遍历Collection
-6.7-Map接口及其实现
-6.8-第6章小结
--第6章小结
-课件
--课件
-7.0-导学
--导学
-7.1-绘图
--绘图
-7.2-Swing基础
--Swing基础
-7.3-Swing的层次
--Swing的层次
-7.4-布局管理
--布局管理
-7.5-内部类
--内部类
-7.6-事件处理的基本概念
-7.7-事件派发机制
--事件派发机制
-7.8-顶层容器
--7.8-顶层容器
-7.9-中间层容器(一)
-7.10-中间层容器(二)
-7.11-原子组件(一)
-7.12-原子组件(二)
-7.13-原子组件(三)
-7.14-其它Swing特性
-7.15-第7章小结
-课件
--课件