实验报告四 异常类
一、实验目的及要求
-
实验目的:掌握异常类中的try-catch语句和自定义异常类,熟悉并学会自定义异常对象的方法,对程序运行中出现的各种异常进行处理。
-
实验要求:清楚try-catch语句和自定义异常类在错误产生时的程序控制流程,要求会自定义异常类的方法,对程序运行时可能出现的问题进行处理,给出产生异常情况下的具体操作。
-
上机实验内容:使用try-catch语句来处理异常,将可能出现的异常操作放在try-catch语句的try部分,将发生异常后的处理放在catch部分,让程序有机会对错误作出处理。同时,编写程序扩展Exception类定义自己的异常类,然后规定哪些方法产生这样的异常。在定义具体类声明一个方法时使用throws关键字声明要产生的若干个异常,并在该方法的方法体中具体给出产生异常的操作,让程序转向对异常进行处理,最后完成实验报告。
二、实验环境
-
硬件要求:计算机一台
-
软件要求:Windows操作系统,使用Java语言,集成开发环境不限,建议使用如Eclipse、MyEclipse或IntelliJ IDEA等。
三、实验内容
- 基本概念
1.1 异常定义
- 异常是运行程序的过程中产生的异常情况。
- 异常的情况是指程序在运行过程中,可能由于外界条件的变更(不设想的不一致)导致出现错误的情况(如数据库连接)。
- 异常不同于常态,在程序运行过程中,有错误产生,把这种错误的状态称为异常。但是开发过程中,语法错误和逻辑错误不属于异常。
- 出现异常时,Java会阻止当前的方法,中断执行程序的指令流。为了更好的错误,我们必须使用异常类。
1.2 出现异常的原因
- Java内部出现的错误,由jvm虚拟机产生的异常。这种一般属于error类,我们处理不了(关机重启),交给jvm自行处理。
- 编写代码时产生的错误,就像算法异常,空指针异常等。这种属于Exception类,我们可以根据报错原因,修改错误。
- 手动throw异常,提示使用者一些信息。
1.3 异常产生的过程
- 运行或编译时产生异常。例如数组下标越界,空指针异常等。
- JVM会自动创建对应异常类的对象,例如new 。ArrayIndexOutOfBoundsException()。
- 异常类需要在代码中声明抛出。例如函数声明使用throws关键字声明可能抛出的异常类。
- 当前方法无法处理异常,会将异常对象传给调用该方法的上一级方法。如果一直无法处理会传给main()方法。
- main()方法也无法处理,会将异常对象传给JVM。
- JVM收到异常后,会打印异常的类名、详细消息和发生异常的代码位置到控制台。例如:Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3at Test.main(Test.java:5)
- 然后JVM会终止程序的运行,退出程序。
1.4 Java异常和错误的概念
- Throwable是所有错误或异常的超类,下分Error和Exception两大类。
- error错误是Java内部产生的错误,程序无法处理,如:Virtual MachineError(虚拟机运行错误)、NoClassDefFoundError(类定义错误),堆栈溢出。
- Exception异常是程序运行时出现的错误。可以通过报错类型进行修改错误。Exception异常可以分为checkedexception(受检异常)和uncheckedexception(不受检异常)。受检异常发生在编译期间,必须对异常情况进行处理,要么用try…catch要么使用throw。否则编译不通过。不受检异常发生在运行期间,这个时候需要根据报错提示解决。
1.5 捕获异常的组合方式
- try catch finally组合:检测异常,并传递给catch处理,并在finally中进行资源释放。
- try catch组合 : 对代码进行异常检测,并对检测的异常传递给catch处理。对异常进行捕获处理。
- 一个try 多个catch组合 : 对代码进行异常检测,并对检测的异常传递给catch处理。对每种异常信息进行不同的捕获处理。 注意:这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。
- try finally 组合: 对代码进行异常检测,检测到异常后因为没有catch,所以一样会被默认jvm抛出。异常是没有捕获处理的。但是功能所开启资源需要进行关闭,所有finally。只为关闭资源。
1.6 异常的处理的两种方式
在Java中对于程序可能出现的检查时异常,要么用try…catc