当前课程知识点:“做中学”Java程序设计 >  第5章捕获并处理异常 >  5.1异常处理机制 >  Video

返回《“做中学”Java程序设计》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《“做中学”Java程序设计》慕课在线视频列表

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的我们称之为非检查异常

你可以选择性的对它进行相应的处理

“做中学”Java程序设计课程列表:

第1章初始Java

-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章使用Java基本语法(1)

-2.1认识标识符

--Video

-2.2变量和变量类型

--Video

-2.3数据类型和类型转换

--Video

-2.4使用常量

--Video

-2.5使用注释

--Video

-2.6使用运算符进行算术运算

--Video

-第2章使用Java基本语法(1)--测试题

第2章使用Java基本语法(2)

-2.7使用运算符进行逻辑处理

--Video

-2.8使用if进行流程控制

--Video

-2.9使用switch进行流程控制

--使用switch进行流程控制

-2.10使用循环

--Video

-2.11循环的跳出和继续

--Video

-2.12多重循环

--Video

-第2章使用Java基本语法(2)--测试题

第3章使用面向对象基础语法

-3.1认识类和对象

--Video

-3.2为类添加属性

--Video

-3.3为类添加方法

--Video

-3.4为类添加静态方法

--Video

-3.5递归方法

--递归方法

-3.6构造方法

--Video

-3.7重载方法

--Video

-第3章使用面向对象基础语法--测试题

第4章使用面向对象高级语法

-4.1使用继承语法

--Video

-4.2使用数组

--Video

-4.3使用数组类操作数组

--Video

-4.4使用抽象类

--Video

-4.5使用接口

--Video

-第4章使用面向对象高级语法--测试题

第5章捕获并处理异常

-5.1异常处理机制

--Video

-5.2捕获异常

--Video

-5.3创建自定义异常

--Video

-第5章捕获并处理异常--测试题

第6章使用SWT设计界面

-6.1SWT图形界面

--Video

-6.2使用SWT布局管理-FillLayout

--使用SWT布局管理-FillLayout

-6.3使用SWT布局管理-RowLayout

--使用SWT布局管理-RowLayout

-6.4SWT中的事件模型

--Video

-6.5常见事件处理写法

--Video

-第6章使用SWT设计界面--测试题

第7章微波炉模拟程序

-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

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。