面向对象开发期末复习概述(四)

第7章 异常处理(内部类不作要求)
程序中的三类错误
编译错误、逻辑错误和运行时错误
(1)编译错误是由于没有遵循Java语言的语法规则而产生的,这种错误要在编译阶段排除,否则程序不可能运行。
(2)逻辑错误是指程序编译正常,也能运行,但结果不是人们所期待的。
(3)运行时错误是指程序运行过程中出现了一个不可能执行的操作,就会出现运行时错误,运行时错误有时也可以由逻辑错误引起。
异常处理的主要目的是即使在程序运行时发生了错误,也要保证程序能正常结束,避免由于错误而使正在运行的程序中途停止。
什么是异常
一个好的应用程序,除了具备用户要求的功能外,还要求能预见程序执行过程中可能产生的各种异常,并把处理异常的功能包括在用户程序中。
异常处理机制是JAVA语言的重要特征之一。通过异常处理机制可防止程序执行期间因出现错误而造成不可预料的结果。
Java程序运行过程中,产生的异常的三种类型:
(1)JAVA虚拟机由于某些内部错误产生的异常:这类异常不在用户程序的控制之内,也不需要用户处理这类异常;
(2)标准异常类:由java系统预先定义好的。这类异常是由程序代码中的错误而产生的,这是需要用户程序处理的异常。如:
① 用户输入出错
② 所需文件找不到
③ 运行时磁盘空间不够
④ 内存不够
    ⑤ 算术运算错 (数的溢出,被零除…)
⑥ 数组下标越界
⑦ 访问空对象 等等
(3)根据需要在用户程序中自定义的一些异常类。
标准常用异常类的层次结构:

异常处理过程
(1)Java对异常的处理涉及两方面:
一是抛出(throw)异常
二是捕捉(catch)异常
如果程序在运行过程中出现了运行错误,并且产生的异常与系统中预定义某个异常类相对应,系统就自动产生一个该异常类的对象,这个过程称为抛出(throw)异常。当有异常对象抛出时,将在程序中寻找处理这个异常的代码,如果找到处理代码,则把异常对象交给该段代码进行处理,这个过程称为捕捉(catch)异常。如果程序中没有给出处理异常的代码,则把异常交给Java运行系统默认的异常处理代码进行处理。默认的处理方式是:首先显示描述异常信息的字符串,然后终止程序的运行。
(2)异常的抛出(throw)
抛出异常有两种方式:由系统自动抛出和利用抛出语句抛出。
√由系统自动抛出异常
在程序运行过程中,如果出现了可被Java运行系统识别的错误,系统会自动产生与该错误相对应的异常类的对象,即自动抛出。
√人为异常抛出,两种方式:
①在方法头写出需要抛出的异常(利用throws语句)
基本语法格式:
修饰符 返回值类型 方法名([形参表])throws 异常类名1,异常类名2,……
{……}
②在方法体内抛出异常(利用throw语句)
基本语法格式:
throw 异常类对象名;
throw (new 异常类名());
(3)捕捉异常:用try catch finally 语句
try catch finally 语句捕获程序中产生的异常,然后针对不同的异常采用不同的处理程序进行处理。
基本格式:
try//try块发现异常并抛出“有异常类产生的对象”
{
//一条或多条要检查的程序语句;
}
catch(异常类1 对象名)// catch块捕捉由try块抛出的异常,并做相应处理
{
//异常发生时的处理语句;
}
catch(异常类2 对象名)
{
//异常发生时的处理语句;
}
finally //finally块必须执行的语句,不管发生异常否
{
//执行最终处清理的语句
}
try catch finally 语句中把可能产生异常的程序放入try{}语句块,然后在之后紧跟一个或多个catch语句块,每个catch块处理一种可能抛出的特定类型的异常。
finally 语句定义了一个程序块,放于try{},catch{}之后,不管程序有无异常都会执行。
注:try catch finally 语句中,catch语句块可以有一个或多个,finally语句块可以省略,但是try语句后至少要有一个catch语句或finally语句。
用户自定义异常
一般形式为:
class 自定义异常类名 extends Exception
{
异常类体;
}
注:用户定义的异常同样要用try–catch捕获,但必须由用户自己抛出。
如:throw new自定义异常类名()
问题:
异常的对象的根类是哪个类?
是Throwable类
Throwable类有哪两个分支?
分成Error类和Excepion类两个分支
Error类表示严重错误
Exception类表示可以在程序中处理的错误
Exception类有哪两个分支?
分成运行时异常和非运行时异常(已检查异常)
运行时异常编译不检查,在运行时才会发生异常
已检查异常编译时就会作检查,不处理异常则通不过编译
如果在try块中发生异常,那么程序将会跳转到哪?
会跳转到catch语句块
catch语句可以用父类类型捕获子类异常吗?
因为有多态特点,是可以的
处理异常代码finally语句会在什么时候执行?
finally代码在任何时候都会执行,不管有没有发生异常。
如何声明已检查异常,由谁来处理这个异常?
用throws语句来声明一个已检查异常,由方法的调用者来处理这个异常
如何抛出一个异常?
用throw语句抛出
写出下列程序的运行结果:
1. public class Test{
public static void fun(int i){
try{ if(i==1) throw new Exception();
System.out.print(“1”);
}catch(Exception e){
System.out.print(“2”);
}finally {
System.out.print(“3”);
}
System.out.print(“4”);
}
public static void main(String args[]){
fun(1);
}
}

2. 这段代码的输出结果是什么?
try{
System.out.print(“try,”);
return;
} catch(Exception e){
System.out.print(“catch,”);
} finally {
System.out.print(“finally”);
}

3. public class Test {
public static void main(String[] args) {
new Test().test();
}
public void test() {
try { int[] arr = new int[3];
arr[3] = 2;
System.out.println(“try”);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println(“catch 1”);
} catch (Exception e) {
System.out.println(“catch 2”);
} finally {
System.out.println(“finally”);
}
}
}

面向对象开发期末复习概述(四)相关推荐

  1. 面向对象开发期末复习概述(二)

    面向对象开发期末复习概述(二) 第2章 Java基础语法&第3章 运算符.表达式.语句 1.Java语言中定义了3种注释形式: (1)// 单行注释,注释到行尾 (2)/---------/ ...

  2. 面向对象开发期末复习概述(七)

    面向对象开发期末复习概述(七) 第15章 泛型与集合框架 集合 即容器(Container),是用来存放数据的盒子.Java中提供了很多的集合类 集合特征:(1)可以存放多个数据,数据可以是不同类型 ...

  3. 面向对象开发期末复习概述(三)

    面向对象开发期末复习概述(三) 第4章对象和类 & 第5章子类和继承&第6章 接口与实现 OOP是:Object Oriented Programming(面向对象编程) 类和对象的区 ...

  4. 面向对象开发期末复习概述(六)

    面向对象开发期末复习概述(六) 第10章 输入/输出流 什么是输入输出 输入输出过程: 读取 写入 打开输入流 打开输出流 如流中还有信息,则读取数据 如流中还有更多信息,则写入数据 关闭输入流 关 ...

  5. 面向对象开发期末复习概述(一)

    面向对象开发期末复习概述(一) 第1章 Java概述 1.开发Java语言的公司:Sun (Sun Microsystems)太阳微电子公司开发 2.Java的3个版本?(JDK 1.5后) Java ...

  6. 移动应用开发期末复习(自用复习勿转)

    移动应用开发期末复习 题型 选择题 15*2=30 填空题 13*2=26 (题中已给候选项,选出正确的选项即可) 简答题 4*6=24 程序设计填空题 10*2=50 (题中已给候选项,选出正确的选 ...

  7. Java面向对象程序设计 期末复习

    第1章 1.Java应用程序分几类?各有什么特点? 不同的Java程序运行在不同的环境中,习惯上将运行环境相同的Java程序归为一类,可以分3类: Java Application应用程序,属于Jav ...

  8. 通信网络基础期末复习-第四章-多址接入协议

    文章目录 第四章 多址技术 4.1 多址协议概述 4.1.1 MAC层在通信协议中的位置 4.1.2 多址协议的分类 4.1.3 系统模型 4.2 固定多址接入协议 4.2.1 频分多址接入(FDMA ...

  9. Android开发 期末复习

    Android开发 RelativeLayout布局时居中显示 android:layout_centerInParent="true" 控件的高度和宽度单位:dp , 像素 : ...

最新文章

  1. 微型计算机c240,PC微机原理实验.doc
  2. Visual Studio 2015专业版创建Win32控制台应用程序,C,C++源文件
  3. 简单的封装axios 不包含状态码和提示
  4. linux下简单限制网卡速度
  5. Win7 Tortoise SVN安装异常--please install the universal crt first.You can .. windows-update(Kb2999226)
  6. 强化学习: Q-learning实例python实现
  7. MPEG4标准中的Advanced Simple Profile(ASP)完整的说明-01-02章
  8. 软件企业变更管理流程
  9. Ti c64x 优化基本策略
  10. NVIDIA Maxine 姿势识别极简教程
  11. jq 登陆界面 php,jquery实现用户登陆界面技术解答
  12. Excel 图表制作 甘特图 (Excel图表学习:三)
  13. vue+elementui上传视频并回显
  14. strpos函数 mysql_php常用字符串查找函数strstr()与strpos()实例分析
  15. vue加载图片出现404用默认图片替换的方法
  16. matlab求解一阶微分方程组
  17. 软式棒垒球运动进校园
  18. js原生、jquery单选框radio总结(获取值、设置默认选中值、样式)
  19. 最新整理常见互联网公司职级和薪资一览!
  20. Wex5调用百度地图进行范围签到

热门文章

  1. python发行版是什么意思_致 Python 初学者
  2. 王者荣耀4.4日服务器维护,一天不玩都受不了?玩家4.4号当天利用王者荣耀BUG强行进入游戏!...
  3. Qt ERROR : The inferior stopped because it received a signal from the operating system.
  4. SAN SWITCH zoning 划分及some command
  5. 设计模式之禅【迭代器模式】
  6. 荣耀30青春版怎么样?到手后远超预期!
  7. 运行中的Docker容器添加映射端口
  8. 从爆款单品到全屋智能 Aqara如何引领行业变革
  9. python 模拟微信浏览器请求_python+requests对app和微信小程序进行接口测试
  10. java实现微信企业付款到个人零钱(微信红包)