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

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

第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”);
}
}
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Taciturn knight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值