当前课程知识点:“做中学”Java程序设计 > 第5章捕获并处理异常 > 5.1异常处理机制 > Video
在开发程序的过程当中我们经常要跟错误打交道
常见的程序错误的可以分为这样几类
第一类叫做编译错误
Compile Error
也就是我们所谓的语法错误
通常是因为我们在编写程序的过程当中
错误的使用了Java语法规则造成的
比如少了一个语句结束的分号
或者缺少配对的括号
没有正确的导入所需要的类等等
这就是我在JAVA的编译阶段就可以提前发现
所以叫做编译错误
这种是我们的逻辑错误
也就是我们说的 算法错误
这种错误往往是开发者对于需求的错误理解
或者是算法设计的缺陷导致的
比如在设计一个电商平台的支付模块的时候
如果你允许 买家买的东西没有任何的支付
就让后台进行发货
很显然这就是一个逻辑上的问题
通常相见的逻辑错误
就需要从算法的层面加以解决
第3种 在一个Java程序的执行过程当中同样会出现一些非正常的情况
比如一个JAVA程序试图去打开一个已经删除了的文件
或者是试图去访问一个越界的数组元素
还可能是访问一个未初始化任何对象的引用等等
类似这样的情况
就是我们今天要介绍给大家的 Java的异常
可能平的描述还太过简单和抽象那么我们先来看一看下面的程序代码
在这个代码片段当中
我们编写了一个求商的静态方法 Quotient
它的实现非常简单
在代码的第28行将用户传入的 numerator 整形变量和denominator整形变量作一个整除的操作
操作然后我们在Main方法当中 通过控制台相继读入用户输入的两个整型值
在代码的第28行将用户传入的 numerator 整形变量和denominator整形变量作一个整除的操作
操作然后我们在Main方法当中 通过控制台相继读入用户输入的两个整型值
在代码的第20行通过调用自定义的quotient静态方法
将结果通过第21行输出到我们的控制台当中
这段程序没有任何的编译错误
他能够正常的运行
我来看一下 在第1次运行当中我们输入的一个数 10 然后他在输入第2个数 2
程序它能够正确的得到我们的结果
10除以2余5
我们再来运行一次
这次来我们同样先输入10
但是在第2个数字当中
我们来输一个0
此时我们观察一下程序结果
在控制台上 显示了一连串的信息
这个信息告诉我们 在执行过程当中 产生了一个 Arithmetic Exception的异常
在刚才的程序执行过程中程序从入口方法Main开始执行
那么我一会的方法调用栈就将main方法牙展
执行过程当中我们依次读入用户输入的两个数 10 和 0
当它执行到quotient方法的调用时候我们将当前的工作状态保存起来
并且将新的方法quotient的压栈 转而去执行这个action的方法
当虚拟机执行到整除操作时
由于发现了除0的运行器异常
这时候就会自动的抛出一个arithmetic Exception的预定义异常对象观察下此时的调用栈的方法列表最顶层的quotient方法
就是我们抛出这个异常的方法
如果该方法没有对异常对象做任何的处理那么抛出的异常对象
将沿着方法的调用栈
继续往下寻找 依次的去查看类方法
看看mian这个方法有没有对异常对象的相关处理代码
如果main方法也没有对其做任何的处理
最终这个异常对象将交给我们的虚拟机
虚拟机的默认处理方式就是打印异常对象的堆栈信息
并且终止整个程序的运行
Java把异常当作一个对象来处理
这里的arithmetic exception
就是我们的jdk当中已经预定好了一个异常类型
它具有可抛出的特性像这样的异常类型在我们的JAVA当中还有很多很多
那么什么类型可以抛出什么的类型又是一个异常类型的
这里那我们就有必要了解Java当中的 异常的继承架构
异常的家族是一个非常丰富而庞大的族群
在这张图当中大家可以看到他的最顶层的继承体系
Throwble作为所有异常的超类
从而让所有继承于他的子类具有被抛出的特性
他有两大分支
错误error
和异常exception
别人的通常是指程序当中无法处理的系统级的错误
比如说 硬件层面的错误 虚拟机的错误或者是内存不足等硬件问题
当这些错误发生的时候应用程序是无力恢复的
作为程序员基本上也就不需要去关心和处理这些error级别的错误
当地传播到我们的虚拟机的时候
虚拟机一般会选择终止整个线程
并且留下些必要的日志
而 exception 是可以让程序员在代码当中进行处理的异常
也就是我们这个单元需要重点掌握和学习的异常类型
它还可以分成两类
一类直接继承exception的子类
对他们我们必须通过捕获语句或者声明语句来强制处理
我们称之为检查异常
Check exception
另外还有一个重要的子分区就是我们的runtime exception对于runtime exception 子类
他们是用来描述一些在运行期当中可能抛出的异常
对这些异常编译器并没有强制要求我们去处理它们
所以你可以选择性的去处理
因此我们将这些继承于runtime exception的异常称之为非检查的异常
我们可以在eclipse当中查看我们的
Arithmetic exception
通过按键盘F4这个快捷键来查看它的继承关系
可以看到他是继承于runtime exception的
根据刚才的解释它应该是属于的非检查的异常
这也就是我们在没有编写任何的处理代码的时候它照样能够编译通过 的主要原因
好了总结一下我们今天学的知识
首先异常是JAVA程序代码的执行过程当中 可能产生的一个特殊的Java类
利用它你可以查看异常发生的状态信息
以及抛出异常的代码位置
从而为程序的恢复和用户的通知提供可能
其次程序当中的特定条件会触发抛出异常的操作
如果不对异常对象进行任何的处理
该异常对象将沿着调用栈的调用顺序
寻找捕捉并处理他的相关程序代码
如果没有任何程序代码对它进行处理
最终将交给我们的虚拟机来处理
而虚拟机的默认处理方式就是在控制台上打印异常的调用栈 跟踪信息
Jdk与定义了大量的异常类型
任何直接或者间接的继承exception类型的我们称之为检查异常
它必须要通过代码来对它进行处理
而直接或者间接的继承与runtime exception的我们称之为非检查异常
你可以选择性的对它进行相应的处理
-1.1Java简介
--01Java简介
-1.2搭建Java开发环境
--Video
-1.3使用记事本编写Java程序
--Video
-1.4使用Eclipse开发Java程序
--Video
-1.5导入/导出Java项目
--Video
-1.6管理组织代码
--Video
-第1章初始Java--测试题
-2.1认识标识符
--Video
-2.2变量和变量类型
--Video
-2.3数据类型和类型转换
--Video
-2.4使用常量
--Video
-2.5使用注释
--Video
-2.6使用运算符进行算术运算
--Video
-第2章使用Java基本语法(1)--测试题
-2.7使用运算符进行逻辑处理
--Video
-2.8使用if进行流程控制
--Video
-2.9使用switch进行流程控制
-2.10使用循环
--Video
-2.11循环的跳出和继续
--Video
-2.12多重循环
--Video
-第2章使用Java基本语法(2)--测试题
-3.1认识类和对象
--Video
-3.2为类添加属性
--Video
-3.3为类添加方法
--Video
-3.4为类添加静态方法
--Video
-3.5递归方法
--递归方法
-3.6构造方法
--Video
-3.7重载方法
--Video
-第3章使用面向对象基础语法--测试题
-4.1使用继承语法
--Video
-4.2使用数组
--Video
-4.3使用数组类操作数组
--Video
-4.4使用抽象类
--Video
-4.5使用接口
--Video
-第4章使用面向对象高级语法--测试题
-5.1异常处理机制
--Video
-5.2捕获异常
--Video
-5.3创建自定义异常
--Video
-第5章捕获并处理异常--测试题
-6.1SWT图形界面
--Video
-6.2使用SWT布局管理-FillLayout
-6.3使用SWT布局管理-RowLayout
-6.4SWT中的事件模型
--Video
-6.5常见事件处理写法
--Video
-第6章使用SWT设计界面--测试题
-7.1微波炉模拟程序的界面制作
--Video
-7.2微波炉模拟程序的代码重构
--Video
-7.3微波炉模拟程序的事件监听
--Video
-7.4微波炉模拟程序的数字键盘
--Video
-7.6微波炉模拟程序CookTimer
--Video
-7.7微波炉模拟程序添加图像
--Video
-7.8微波炉模拟程序添加声音
--Video
-7.9微波炉模拟程序安装包制作
--Video



