内容正文:
异常处理
计算机程序设计
专题复习讲练测
电工版第二版
掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。
考纲要求
一
考试内容:
异常处理机制;try-catch-finally语句;抛出异常。
知识点要求:
1.了解异常的概念,理解异常处理机制。
2.掌握用try-catch-finally语句捕获异常。
3.掌握throw语句、throws子句和声明抛出异常。
知识点梳理
二
异常
异常就是不可预测的不正常情况。
程序执行期间发生的不正常情况,会打断正常的指令流,Java自动创建一个异常对象,并执行相应的代码去处理该事件。
异常可分为两大类:
java.lang.Exception 类与java.lang.Error 类。这两个类均继承了 java.lang.Throwable类。
Error与Exception类统称为异常类。
知识点梳理
二
Throwable
Throwable中的常用方法:
① public void printStackTrace() :打印异常的详细信息。
包含了异常的类型,异常的原因,还包括异常出现的位置,在开发和调试阶段,都得使用printStackTrace。
② public String getMessage() :获取发生异常的原因。
提示给用户的时候,就提示错误原因。
③ public String toString() :获取异常的类型和异常描述信息(不用)。
知识点梳理
二
异常
Error:表示编译时和系统错误(外部错误),专门用来处理严重影响程序运行的错误比如OutOfMemoryError。这类错误发生时,Java运行时环境(JRE)通常无法做什么恢复动作,因此应用程序不应该捕获Error。
知识点梳理
二
IOException
Exception 类包含了一般性的异常,通常这些异常在被捕捉到之后便可做妥善的处理,以确保程序继续运行。
Exception类扩展出了数个子类,其中 IOException 和 RuntimeException 是较常用的两种。
(1)IOException 是一个检查型异常(Checked Exception),是所有与输入输出(I/O)操作相关的异常的父类。当程序在执行I/O操作时遇到问题,比如文件读写、网络通信等,就可能抛出 IOException 或其子类异常。
知识点梳理
二
IOException
IOException 的子类
IOException 有许多子类,用于表示不同类型的I/O错误。
1)FileNotFoundException:当尝试打开不存在的文件进行读取或写入时抛出。
2)EOFException:当输入过程中意外到达文件或流的末尾时抛出。
3)MalformedURLException:当尝试创建一个格式不正确的URL时抛出。
4)SocketException:当在使用套接字时发生错误时抛出。
5)UnknownHostException:当无法识别主机名或IP地址时抛出。
知识点梳理
二
RuntimeException
在Java中,RuntimeException 是一个非检查型异常(Unchecked Exception),它是所有运行时异常的父类。与检查型异常(如 IOException)不同,RuntimeException 不需要在方法签名中声明,也不强制要求在代码中进行捕获。这类异常通常表示编程错误、不合理的操作或者不可预测的情况。
知识点梳理
二
RuntimeException
常见的 RuntimeException 子类
1)NullPointerException:当程序试图访问或操作一个空对象引用时抛出。
2)ArrayIndexOutOfBoundsException:当程序试图访问数组的非法索引时抛出。
3)ClassCastException:当试图将对象强制转换为不是实例的类时抛出。
4)IllegalArgumentException:当传递给方法的参数不合法时抛出。
5)ArithmeticException:当算术运算出现错误,如除以零时抛出。
知识点梳理
二
异常处理
异常处理关键字
1)try:尝试块,用于包围可能会抛出异常的代码。
2)catch:捕获块,用于处理try块中抛出的异常。
3)finally:最终块,无论是否发生异常,都会执行的代码块。
4)throw:用于手动抛出异常。
5)throws:用于方法签名,声明该方法可能会抛出的异常
知识点梳理
二
异常
异常处理是由try 、catch 和 finally3 个关键字组成的程序块,其语法如下:
try {
//要检查的程序语句;
}catch (异常类对象名称){
//异常发生时的处理语句;
}finally {
//一定会执行的程序代码;
}
知识点梳理
二
抛出异常throw
throw用在方法内,用来抛出一个异常对象,将这个异常对象传递到调用者处,并结束当前方法的执行。
语法格式: throw new 异常类名(参数);
案例:throw new NullPointerException("空指针异常了");
知识点梳理
二
异常
声明异常throws
声明异常:将问题标识出来,报告给调用者。如果方法内通过throw抛出了编译时异常,而没有捕获处理,那么必须通过throws进行声明,让调用者去处理。
关键字throws运用于方法声明之上,用于表示当前方法不处理异常,而是提醒该方法的调用者来处理异常(抛出异常)。
语法格式:
修饰符 返回值类型 方法名(参数) throws 异常类名1,异常类名2…{ }
知识点梳理
二
自定义异常
为了处理各种异常,Java 可通过继承的方式编写自己的异常类。因为所有可处理的异常 类均继承自 Exception类,所以自定义异常类也必须继承这个类。
异常类如何定义:
1. 自定义一个编译期异常: 自定义类并继承于 java.lang.Exception 。
2. 自定义一个运行时期的异常类:自定义类并继承于 java.lang.RuntimeException 。
格式:
public class RegisterException extends Exception {
}
限时练习
三
1. 在Java中,以下( )关键字用于声明一个方法可能会抛出异常。
A. try
B. catch
C. finally
D. throws
【答案】D
【解析】throws关键字用于方法签名中,声明该方法可能会抛出的异常。try用于包围可能会抛出异常的代码块,catch用于捕获和处理异常,finally用于定义无论是否发生异常都会执行的代码块。
限时练习
三
2. 以下( )异常是Java中的运行时异常。
A. IOException
B. SQLException
C. ArithmeticException
D. ClassNotFoundException
【答案】C
【解析】ArithmeticException是Java中的一个运行时异常(RuntimeException的子类),它会在算术运算中出现错误时抛出,例如除以零。IOException、SQLException和ClassNotFoundException都是检查型异常,必须在代码中显式处理。
限时练习
三
3. 在Java中,当try块中发生异常时,以下( )选项描述了异常处理的过程。
A. 只有catch块会执行
B. 只有finally块会执行
C. catch块和finally块都会执行
D. try块和finally块都会执行
【答案】C
【解析】 当try块中发生异常时,控制流会跳转到匹配该异常类型的catch块。无论是否发生异常,finally块都会执行,所以正确答案是catch块和finally块都会执行。
限时练习
三
4. 在Java中,以下( )类是所有异常类的根类。
A. Error
B. Throwable
C. Exception
D. RuntimeException
【答案】B
【解析】 所有异常类都是Throwable类的子类。Error类表示严重的问题,大多数情况应用程序不应该捕获这类异常。Exception类是Throwable的子类,它用于表示程序可能恢复的异常情况。RuntimeException是Exception的子类,表示运行时错误。
限时练习
三
5. 在Java中,以下说法是正确的的是( )
A. 检查型异常必须被捕获或声明抛出
B. 运行时异常必须被捕获
C. finally块中的代码永远不会执行
D. 你可以在没有try块的情况下使用catch块
【答案】A
【解析】检查型异常(Checked Exceptions)必须被显式地捕获(使用try-catch块)或者在方法签名中声明抛出(使用throws关键字)。运行时异常(Unchecked Exceptions)不需要显式地捕获。finally块中的代码总是会执行,无论是否发生异常。catch块必须与try块一起使用,不能单独存在。
限时练习
三
6. Java中的所有异常都是Exception类的实例。( )
【答案】错误
【解析】并非所有异常都是Exception类的实例。Java中的异常分为Exception和Error两大类,Exception类及其子类是异常,而Error类及其子类表示错误,它们都是Throwable的子类。
限时练习
三
7. 在Java中,try块后面必须跟着至少一个catch块或一个finally块。( )
【答案】正确
【解析】 在Java中,try块后面必须跟着至少一个catch块或一个finally块,或者两者都有,但不能单独存在。
限时练习
三
8. 在catch块中可以重新抛出捕获的异常。( )
【答案】正确
【解析】在catch块中可以使用throw关键字重新抛出捕获的异常,也可以抛出一个新的异常。
限时练习
三
9.如果try块中包含return语句,finally块将不会执行。( )
【答案】错误
【解析】即使try块中包含return语句,finally块也会执行。finally块总是在退出try块之前执行,无论是因为正常退出还是因为遇到return语句。
限时练习
三
10. Java中的try块只能有一个。( )
【答案】正确
【解析】 在一个try-catch-finally结构中,只能有一个try块,但可以有多个catch块和一个finally块。
限时练习
三
11. Java中的异常处理机制可以处理任何运行时错误。( )
【答案】错误
【解析】 Java的异常处理机制可以处理异常情况,但并不是所有的运行时错误都可以通过异常处理来恢复。例如,栈溢出错误(StackOverflowError)和内存溢出错误(OutOfMemoryError)通常无法通过异常处理来恢复。
限时练习
三
12. 在Java中,你可以声明一个方法抛出多个异常。( )
【答案】正确
【解析】 在Java中,可以在方法签名中使用throws关键字声明该方法可能抛出的多个异常,每个异常类型之间用逗号分隔。
限时练习
三
13.填写下列代码片段中缺失的部分,以便正确地抛出自定义异常NegativeValueException
【答案】 throw new NegativeValueException
限时练习
三
14.填写下列代码片段中缺失的部分
【答案】FileNotFoundException e
内容小结
五
谢谢
$$