Java异常处理详解

版权申诉
0 下载量 195 浏览量 更新于2024-07-01 收藏 96KB PPTX 举报
"Java程序设计中的异常处理是编程过程中必不可少的一部分,它涉及到程序在遇到错误或不可预见情况时如何恢复和优雅地终止。异常(Exception)是程序运行时发生的问题,比如文件不存在、网络中断、数组下标越界等。在Java中,异常是以对象的形式存在的,它们可以由应用程序自身或Java虚拟机(JVM)生成。 当Java代码尝试执行可能导致异常的操作时,如果没有适当的处理机制,编译器会报错,如`FileNotFoundException`、`IOException`等。例如,在`Exception1`的例子中,尝试打开并读取名为"text.txt"的文件,如果文件不存在,`FileInputStream`的构造函数会抛出`FileNotFoundException`。此外,`FileInputStream`的`read()`方法和`close()`方法也可能抛出`IOException`。因此,为了使程序能够正常编译,需要捕获这些异常或者在方法签名中声明它们可能会被抛出。 捕获异常的基本语法是使用`try-catch`块。在这个块中,`try`部分包含可能会抛出异常的代码,而`catch`部分定义了如何处理这些异常。例如: ```java try { FileInputStream fis = new FileInputStream("text.txt"); int b; while ((b = fis.read()) != -1) { System.out.print(b); } fis.close(); } catch (FileNotFoundException e) { System.out.println("文件未找到:" + e.getMessage()); } catch (IOException e) { System.out.println("IO错误:" + e.getMessage()); } ``` 在`Exception2`的例子中,虽然没有引发异常,但展示了数组下标越界的情况。如果数组长度为3,而尝试访问索引为4的位置,就会抛出`ArrayIndexOutOfBoundsException`。为了避免这种情况,需要确保在循环条件中正确检查索引是否在数组边界内。 异常处理不仅仅是关于错误报告,它也是保证程序健壮性的重要手段。通过妥善处理异常,程序可以在遇到问题时提供有用的反馈,而不是突然崩溃。另外,通过使用`finally`块,可以确保即使在异常发生时也能执行清理任务,如关闭文件流。 Java还提供了异常层次结构,其中`Exception`是所有检查异常(checked exceptions)的基类,而`RuntimeException`是所有未检查异常(unchecked exceptions)的基类。检查异常是那些需要在方法签名中声明的异常,而未检查异常通常表示编程错误,它们可以直接在代码中抛出,无需显式声明。 Java的异常处理机制使得程序员能够有效地管理和恢复程序在运行时遇到的问题,从而提高程序的稳定性和可靠性。正确使用异常处理可以帮助开发者编写出更安全、更易于维护的代码。"
2023-05-30 上传
模块7 异常处理 《Java程序设计案例教程》教学课件07异常处理全文共31页,当前为第1页。 学习目标 01 了解异常产生的原因。 02 了解Java异常体系结构,以及受检异常和未受检异常的区别。 03 掌握使用try-catch-finally语句块捕捉并处理异常。 05 掌握设计和使用用户自定义异常。 04 掌握使用throw语句抛出异常,以及使用throws语句声明方法异常。 《Java程序设计案例教程》教学课件07异常处理全文共31页,当前为第2页。 技能目标 能够在MyEclipse IDE中使用try-catch-finally语句块编写程序捕捉并处理异常。 01 能够在MyEclipse IDE中使用throw语句编写程序抛出异常。 02 能够在MyEclipse IDE中使用throws语句编写程序声明方法异常。 03 能够在MyEclipse IDE中编写程序定义自己的异常。 04 《Java程序设计案例教程》教学课件07异常处理全文共31页,当前为第3页。 7.1 回顾与思考 Java语言的健壮性确保了在编程过程中出现的错误可以得到及时、有效的控制。但是,并不是所有错误都能在编译阶段被发现。有些错误只有在运行时才会发生。在编译或运行时发生的错误都被称为异常。在编译或运行时跟踪这些异常被称为异常处理。Java的异常处理机制负责异常处理和错误恢复。 如果把【例6-1】中的代码"for(int i = 1;i < myArray.length;i++)"改成"for(int i = 1;i <= myArray.length;i++)",这时,编译可以通过。运行后在控制台出现如下提示。 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8 at ch6.example.Example6_1.main(Example6_1.java:16) 《Java程序设计案例教程》教学课件07异常处理全文共31页,当前为第4页。 7.2 异常与异常类 7.2.1 Java异常体系结构 Java中的异常有很多类型,包括在Java API中已经被定义的异常(也称系统异常)和用户自定义异常。所有的异常类都直接或间接继承了Throwable类。Throwable类是Object类的直接子类。 Throwable类有两个直接子类: Error类 Exception类 《Java程序设计案例教程》教学课件07异常处理全文共31页,当前为第5页。 7.2 异常与异常类 7.2.2 受检异常 Exception类及其子类中除了RuntimeException类及其子类以外的异常被称为受检异常(checked exception)。受检异常在编译阶段能被Java编译器检测到,不可回避,用户必须对受检异常进行处理。 《Java程序设计案例教程》教学课件07异常处理全文共31页,当前为第6页。 7.2 异常与异常类 7.2.2 受检异常 【例7-1】受检异常示例。 文件名为Example7_1.java,其代码如下。 《Java程序设计案例教程》教学课件07异常处理全文共31页,当前为第7页。 7.2 异常与异常类 7.2.2 受检异常 【例7-1】受检异常示例。 在"Class.forName("com.mysql.jdbc.Driver");"这条语句下出现了波浪线,光标停留在该语句上会出现浮窗提示:未处理异常类型ClassNotFoundException,如图7-1所示。 图7-1 受检异常未处理的浮窗提示 《Java程序设计案例教程》教学课件07异常处理全文共31页,当前为第8页。 7.2 异常与异常类 7.2.3 未受检异常 属于RuntimeException类及其子类的异常和Error类及其子类的异常被称为未受检异常(unchecked exception)。未受检异常在编译阶段不能被Java编译器检测到。不强迫用户利用异常处理机制对未受检异常进行处理。未受检异常的发生是因为程序有逻辑错误。未受检异常首先且主要通过用户在程序编写过程中避免。如果滥用异常处理机制处理(预防)未受检异常,程序会变得臃肿,影响可读性。 《Java程序设计案例教程》教学课件07异常处理全文共31页,当前为第9页。 7.3 异常处理结构 7.3.1 捕捉异常 1. try-catch语句块 可以使用try和catch语句块对程序中可能出现的异常进行捕捉并处理。把可能产生异常的代码放置在try语句块内,catch语句块紧接着try语句块之后。catch语句块中包含了处理异常及输出异常产生原因的语句。一个catch语句块仅对应一个try语句块,但是一个try语句块可以对应多