JAVA异常PPT(精)
合集下载
异常PPT课件

异常(Exception)
• 任何一种语言设计的程序在运行时都会出错:除数 为零、数组下标越界、文件不存在、内存不足等。
传统的程序设计思想: 从键盘上读入一个int数据。 ……. int j; sacnf(“%d” , &j); …… 如果用户不输入int数据呢? 系统可能会终止程序的
运行。
int j, k=1; k--; …… j=50/k; …… 会引起除法错的错误,系统会终止程序的运行 改进: if(k!=0){
– 运行异常:指由程序运行环境问题造成的程序 异常终止,如打开不存在的文件进行读操作、 程序执行了除以0的操作。
– (可恢复)的Java运行时错误称为异常。
• Java异常是一个描述在代码段中发生的异常 (也就是出错)情况的对象。
• 当异常情况发生,一个代表该异常的对象被创 建并且在导致该错误的方法中被引发 (throw)。该方法可以选择自己处理异常或 传递该异常。
• The resulting code is clear, easy to read, and easy to maintain.
• Java的异常处理机制
– 能够把程序的正常处理逻辑和异常处理逻辑分 开表示,使得程序的异常处理结构比较清晰。 即我们尝试着去做一些事情,对于程序运行可 能发生的每一个错误,我们都有一个相应的代 码块去处理它。
• JVM抛出异常通知应用程序发生了错误,目的是为了 给应用程序提供从问题中恢复的机会。
生成的异常对象 将传递给java运 行时系统,异常 的产生和提交过 程称为抛出异常
Java异常处理通过5个关键字控制:
• try、catch、throw、throws和 finally。
• 下面讲述它们如何工作的。程序声明了你想要的 异常监控包含在一个try块中。如果在try块中发生 异常,它被抛出。你的代码可以捕捉这个异常 (用catch)并且用某种合理的方法处理该异常。 系统产生的异常被Java运行时系统自动引发。手 动引发一个异常,用关键字throw。任何被引发方 法的异常都必须通过throws子句定义。任何在方 法返回前绝对被执行的代码被放置在finally块中。
• 任何一种语言设计的程序在运行时都会出错:除数 为零、数组下标越界、文件不存在、内存不足等。
传统的程序设计思想: 从键盘上读入一个int数据。 ……. int j; sacnf(“%d” , &j); …… 如果用户不输入int数据呢? 系统可能会终止程序的
运行。
int j, k=1; k--; …… j=50/k; …… 会引起除法错的错误,系统会终止程序的运行 改进: if(k!=0){
– 运行异常:指由程序运行环境问题造成的程序 异常终止,如打开不存在的文件进行读操作、 程序执行了除以0的操作。
– (可恢复)的Java运行时错误称为异常。
• Java异常是一个描述在代码段中发生的异常 (也就是出错)情况的对象。
• 当异常情况发生,一个代表该异常的对象被创 建并且在导致该错误的方法中被引发 (throw)。该方法可以选择自己处理异常或 传递该异常。
• The resulting code is clear, easy to read, and easy to maintain.
• Java的异常处理机制
– 能够把程序的正常处理逻辑和异常处理逻辑分 开表示,使得程序的异常处理结构比较清晰。 即我们尝试着去做一些事情,对于程序运行可 能发生的每一个错误,我们都有一个相应的代 码块去处理它。
• JVM抛出异常通知应用程序发生了错误,目的是为了 给应用程序提供从问题中恢复的机会。
生成的异常对象 将传递给java运 行时系统,异常 的产生和提交过 程称为抛出异常
Java异常处理通过5个关键字控制:
• try、catch、throw、throws和 finally。
• 下面讲述它们如何工作的。程序声明了你想要的 异常监控包含在一个try块中。如果在try块中发生 异常,它被抛出。你的代码可以捕捉这个异常 (用catch)并且用某种合理的方法处理该异常。 系统产生的异常被Java运行时系统自动引发。手 动引发一个异常,用关键字throw。任何被引发方 法的异常都必须通过throws子句定义。任何在方 法返回前绝对被执行的代码被放置在finally块中。
《Java编程异常处理》PPT课件

24. }
25.}
13
1.//如果只是想把收到的异常再抛出,不必使用显性再抛出,使用
2.//隐性再抛出(比显性再抛出简单,效果是相同的)
3.//对于捕获异常,显性和隐性都必须在方法声明中明确声明
4.//显性再抛出,用throw语句,隐性再抛出方法体中没有任何抛出异常
的语句
5.//产生的异常自动抛出
15. }
16.}
17.
16
18.public class OverWriteException
19.{
20. public static void main(String[] args) throws Exception{
21.
Father f = new Son();
22.
f.myFunction();
meException.其中Exception类的直接或间接子类,除去RuntimException
类的直接或间接子类,称为捕获异常(必须处理的异常),其他的都为未
捕获异常.
Throwable
Error
Exception
......(未捕获异常) RuntimeException ......(捕获异
4.
try{
5.
int [] a = new int[3];
6.
a[8] = 12;
7.
}catch(ArrayIndexOutOfBoundsException ai){
8.
throw ai;//显性抛出异常
9.
}
10. }
11.
12
12. public static void a(){
13.
try{
java ppt课件

持续集成与持续部署
CI/CD是现代软件开发的必备技能。Java有许多 成熟的CI/CD工具和框架,如Jenkins、Docker等 ,可以帮助开发者实现自动化测试、自动化构建 和自动化部署。
微服务架构
微服务架构是近年来的一种热门技术趋势。Java 凭借其稳定性和性能优势,在微服务架构中有着 广泛的应用。通过使用Spring Boot等框架,开发 者可以更轻松地构建和部署微服务。
丰富的API库:Java语言 拥有庞大的 API(Application Programming Interface)库,涵盖了从 数据结构、数学函数、 图形和声音处理到数据 库连接等各个方面。这 使得Java语言可以方便 地调用各种底层功能, 大大提高了开发效率。
安全性:Java语言具有 严格的数据类型检查和 异常处理机制,可以有 效防止程序出现错误。 此外,Java的内存管理 也是自动的,可以避免 内存泄漏等问题。
Web开发
Java的Web开发框架如Spring、Struts和Hibernate等提 供了强大的功能,使得Java在Web开发领域也具有广泛 的应用。
大数据开发
Java在大数据领域也有广泛的应用,例如使用Hadoop和 Spark等框架进行数据处理和分析。
02
CATALOGUE
java语言基础知识
06
CATALOGUE
java语言的性能优化与安全防护
java程序的性能优化技巧
01
02
03
04
代码优化
编写高效、简洁的代码,避免 冗余和重复,减少不必要的计
算和操作。
内存管理
合理分配和释放内存,避免内 存泄漏和溢出,提高内存使用
效率。
多线程编程
CI/CD是现代软件开发的必备技能。Java有许多 成熟的CI/CD工具和框架,如Jenkins、Docker等 ,可以帮助开发者实现自动化测试、自动化构建 和自动化部署。
微服务架构
微服务架构是近年来的一种热门技术趋势。Java 凭借其稳定性和性能优势,在微服务架构中有着 广泛的应用。通过使用Spring Boot等框架,开发 者可以更轻松地构建和部署微服务。
丰富的API库:Java语言 拥有庞大的 API(Application Programming Interface)库,涵盖了从 数据结构、数学函数、 图形和声音处理到数据 库连接等各个方面。这 使得Java语言可以方便 地调用各种底层功能, 大大提高了开发效率。
安全性:Java语言具有 严格的数据类型检查和 异常处理机制,可以有 效防止程序出现错误。 此外,Java的内存管理 也是自动的,可以避免 内存泄漏等问题。
Web开发
Java的Web开发框架如Spring、Struts和Hibernate等提 供了强大的功能,使得Java在Web开发领域也具有广泛 的应用。
大数据开发
Java在大数据领域也有广泛的应用,例如使用Hadoop和 Spark等框架进行数据处理和分析。
02
CATALOGUE
java语言基础知识
06
CATALOGUE
java语言的性能优化与安全防护
java程序的性能优化技巧
01
02
03
04
代码优化
编写高效、简洁的代码,避免 冗余和重复,减少不必要的计
算和操作。
内存管理
合理分配和释放内存,避免内 存泄漏和溢出,提高内存使用
效率。
多线程编程
javaPPT课件(2024)

常用的集合类
如`ArrayList`、`LinkedList`、`HashSet`、 `TreeSet`、`PriorityQueue`等。
ABCD
2024/1/26
主要的集合接口
包括`Collection`、`List`、`Set`、`Queue`、 `Deque`等。
迭代器与for-each循环
24
JSP技术
JSP定义
JSP语法
JSP内置对象
JSP与Servlet关系
JSP(JavaServer Pages)是 一种基于Java的服务器端编程 技术,用于创建动态Web页面 。
JSP页面由HTML标记和嵌入的 Java代码组成,支持表达式、 脚本元素、指令、动作等。
JSP提供了一组内置对象,如 request、response、session 等,用于处理HTTP请求和生 成响应。
Spring MVC
介绍Spring MVC的工作原理、核心组件以及常用注解。
28
Hibernate框架
Hibernate概述
简要介绍Hibernate的起源 、发展以及特点。
ORM原理
阐述对象关系映射(ORM) 的原理和Hibernate如何实 现ORM。
Hibernate核心 API
详细介绍Hibernate的核心 API,包括Session、 Transaction、Query等。
2024/1/26
19
多线程编程
线程的概念
线程是程序中的执行单元 ,Java支持多线程编程。
创建线程的方式
可以通过继承`Thread`类 或实现`Runnable`接口来 创建线程。
线程的生命周期
包括新建、就绪、运行、 阻塞和死亡五种状态。
java 课件 ppt

04
Java 常用类库
String 类和 StringBuffer 类
字符串处理类
•·
String 类: Java 中的基本 数据类型,用于表示字符串 。它提供了多种方法来操作 字符串,如连接、查找、替 换等。
StringBuffer 类: 用于处理 可变字符串。与 String 类相 比,StringBuffer 提供了更 高效的方法来修改字符串, 因为它在内存中直接修改字 符数组,而不是创建新的 String 对象。
07
Java 多线程编程
线程的创建和管理
继承Thread类
通过继承Thread类并重写run()方法, 可以创建新的线程类。
线程的启动和终止
使用Thread类的start()方法启动线程 ,使用interrupt()方法中断线程。
实现Runnable接口
通过实现Runnable接口并重写run() 方法,可以创建新的线程类。
IO 流和文件操作
01
数据输入输出类
02
•·
03
InputStream 类和 OutputStream 类: 用于读取和写入字节流。 InputStream 用于读取数据,OutputStream 用于写入数据。
04
FileReader 类和 FileWriter 类: 用于读取和写入字符流。 FileReader 用于读取文本文件,FileWriter 用于写入文本文件。
运算符和控制流
for循环
重复执行一段代码指定的次数。
while循环
只要条件为真,就重复执行一段代码 。
面向对象编程基础
类和对象 类是对象的模板,定义了对象的属性和方法。 对象是类的实例,具有类定义的属性和方法。
JavaOO-09异常处理(精)

异常简介
程序运行过程时都可能发生会打断程序正常执行的事件。比如除数为零0、 数组下标越界、文件找不到、内存不足等。 Java中的异常也采用了OO的思想,所有的异常都使用类来描述。程序产生 异常,我们通常称为抛出(throw)异常,此时系统JVM会自动的实例化一个异 常类的对象,对象中保存了具体的异常描述信息。 所有非正常状况的类分为两种,即:Error , Exception. Java异常处理 – 利用抓抛模型处理异常 – 利用面向对象的方法来处理异常
IT Education & Training
捕获异常对象
01 public class Test{ 02 int[] arr=new int[3]; 03 public static void main(String[] args){ 04 new Test().methodOne(); 05 System.out.println("main"); 06 } 07 public void methodOne(){ 08 methodTwo(); 09 System.out.println("One"); 10 } 11 public void methodTwo(){ 12 methodThree(); 13 System.out.println("Two"); 14 } 15 16 17 18 19 20 21 22 23
try{ System.out.println(20/0); }catch(Exception e){ System.out.println(“除数不能为零”); }
IT Education & Training
抓抛模型
java课件ppt

锁机制
Lock接口和ReentrantLock类,提供 了比synchronized更灵活的线程同步 机制,可以实现更复杂的同步操作。
感谢您的观看
THANKS
while语句
当条件满足时重复执行一段代码。
for语句
指定循环次数重复执行一段代码。
函数
函数定义
定义一个具有特定功能的代码块,并为其命 名。
函数参数
传递给函数的值,用于在函数内部使用。
函数返回值
函数执行完毕后返回的结果。
函数调用
使用函数名和参数调用函数,并执行其功能 。
03
Java面向对象编程
面向对象的概念
throw语句用于手动抛出异常,可以在方法中使用throw语句 抛出异常,然后在调用该方法的方法中捕获并处理该异常。
06
Java多线程编程
线程的概念
线程具有5种状态:新建、就绪、运 行、阻塞、终止。
线程具有两个基本属性:优先级和状 态。
线程的创建和启动
01
继承Thread类并重写run()方法,创建线程对象后调用 start()方法启动线程。
异常的分类
运行时异常
运行时异常是那些可能在编译时无法预料到的异常,例如空指针异常(NullPointerException)、数组越界异 常(ArrayIndexOutOfBoundsException)等。
检查异常
检查异常是那些在编译时就能够被检查出来的异常,例如文件未找到异常(FileNotFoundException)、网络 连接中断异常(SocketException)等。
02
实现Runnable接口并重写run()方法,将Runnable对象传递给 Thread构造函数创建线程对象,然后调用start()方法启动线程。
Lock接口和ReentrantLock类,提供 了比synchronized更灵活的线程同步 机制,可以实现更复杂的同步操作。
感谢您的观看
THANKS
while语句
当条件满足时重复执行一段代码。
for语句
指定循环次数重复执行一段代码。
函数
函数定义
定义一个具有特定功能的代码块,并为其命 名。
函数参数
传递给函数的值,用于在函数内部使用。
函数返回值
函数执行完毕后返回的结果。
函数调用
使用函数名和参数调用函数,并执行其功能 。
03
Java面向对象编程
面向对象的概念
throw语句用于手动抛出异常,可以在方法中使用throw语句 抛出异常,然后在调用该方法的方法中捕获并处理该异常。
06
Java多线程编程
线程的概念
线程具有5种状态:新建、就绪、运 行、阻塞、终止。
线程具有两个基本属性:优先级和状 态。
线程的创建和启动
01
继承Thread类并重写run()方法,创建线程对象后调用 start()方法启动线程。
异常的分类
运行时异常
运行时异常是那些可能在编译时无法预料到的异常,例如空指针异常(NullPointerException)、数组越界异 常(ArrayIndexOutOfBoundsException)等。
检查异常
检查异常是那些在编译时就能够被检查出来的异常,例如文件未找到异常(FileNotFoundException)、网络 连接中断异常(SocketException)等。
02
实现Runnable接口并重写run()方法,将Runnable对象传递给 Thread构造函数创建线程对象,然后调用start()方法启动线程。
java课件 ppt

Android开发
Android系统基于Java,因此Java是开发 Android应用程序的主要语言之一。
02 Java语法
数据类型
浮点型
包括float、double 等,用于存储小数 。
布尔型
boolean,用于存 储真或假。
整型
包括byte、short、 int、long等,用于 存储整数。
在方法签名中使用 throws关键字声明该方 法可能抛出的异常类型 ,可以让调用该方法的 代码知道该方法可能会 抛出异常,并采取相应 的处理措施。
06 Java多线程编程
线程的概念
线程具有5种基本状态
新建、就绪、运行、阻塞、终止。
线程的优先级
Java中线程的优先级是一个动态的值,其范围是1~10,默认为5。
线程池
线程池的概念
线程池是一种多线程处理技术,通过预先创建一定数量的线程,并将 这些线程放入线程池中,以避免频繁地创建和销毁线程。
线程池的作用
提高程序的性能和响应速度,降低系统开销,实现资源的复用和共享 。
线程池的创建
通过Executors类提供的静态方法创建不同类型的线程池对象,如 FixedThreadPool、CachedThreadPool、SingleThreadExecutor等 。
03
基础。
继承和多态
01
继承是面向对象编程的重要特性之一,它允许一个 类继承另一个类的属性和行为。
02
多态是指一个接口可以有多种实现方式,或者一个 对象可以表现出多种形态。
03
继承和多态有助于减少代码重复,提高软件的可维 护性和可扩展性。
接口和抽象类
接口是一种完全抽象的类,定义了一组方法,但 没有实现这些方法。
java技术.ppt

• 如果一个方法调用一个抛出受检异常的 方法(含有throws列表的方法),则该方法 必须捕捉这些受检异常,或通过throws 列表声明这些异常
2020/11/2
Java 程序设计
15
重新抛出异常
• 如果catch语句块不处理某种异常,可以重 新抛出异常
– 抛出异常的方法: throw e;
– 由其外层的try- catch 语句块处理
2020/11/2
Java 程序设计
16
• Practice makes perfect.
2020/11/2
Java 程序设计
17
2020/11/2
Java 程序设计
5
什么时候会发生异常?
• 数组的下标越界 • 打开不存在的文件 • 网络无法连接 • 操作数超出所要求的范围 • 少了所需加载的类,
• 自定义异常,要求程序处理
2020/11/2
Java 程序设计
6
处理异常的几种常用方法
1. 一旦捕获异常,马上进行处理 2. 重新抛出异常 3. 捕获异常,但并不处理 4. 通过语句System.exit()退出应用程序
• 异常随时都可以发生
– ArrayIndexOutOfBoundsException – NullPointerException – 定义了引用,但不指向任何对象(object) – ClassCastException
• 数据类型间的转换不合法
• 良好的编程习惯,可以减少很多异常的 发生
2020/11/2
Java程序设计 Programming in Java
清华大学
Tsinghua University
2020/11/2
2020/11/2
Java 程序设计
15
重新抛出异常
• 如果catch语句块不处理某种异常,可以重 新抛出异常
– 抛出异常的方法: throw e;
– 由其外层的try- catch 语句块处理
2020/11/2
Java 程序设计
16
• Practice makes perfect.
2020/11/2
Java 程序设计
17
2020/11/2
Java 程序设计
5
什么时候会发生异常?
• 数组的下标越界 • 打开不存在的文件 • 网络无法连接 • 操作数超出所要求的范围 • 少了所需加载的类,
• 自定义异常,要求程序处理
2020/11/2
Java 程序设计
6
处理异常的几种常用方法
1. 一旦捕获异常,马上进行处理 2. 重新抛出异常 3. 捕获异常,但并不处理 4. 通过语句System.exit()退出应用程序
• 异常随时都可以发生
– ArrayIndexOutOfBoundsException – NullPointerException – 定义了引用,但不指向任何对象(object) – ClassCastException
• 数据类型间的转换不合法
• 良好的编程习惯,可以减少很多异常的 发生
2020/11/2
Java程序设计 Programming in Java
清华大学
Tsinghua University
2020/11/2
异常处理PPT课件

● InterruptedException(中断异常): 当前等待或睡眠线 程被其他线程中断时引发。
这类异常并非因设计或实现引起,是无法避免的。 但一般情况下,程序员应该提供相应的代码捕捉和 处理。
14
受检查的异常和不受检查的异常: 受检查的异常
Exception类及其非RuntimeException子类属于受 检查的异常;
9) System.out.println("After method.");
10) } 11) }
6
Exception in thread "main" ng.ArithmeticException: / by zero at ExceptionDivideBy0.method(ExceptionDivideBy0.java:4) at ExceptionDivideBy0.main(ExceptionDivideBy0.java:8)
一般情况下,程序员可不必理会这类异常,它们 虽然很严重,但很少发生。
12
(2) RuntimeException类及其子类: 表示设计或实现 方面的问题,例如:
● ArithmeticException(算术运算异常): 算术运算时发生 的异常情况,如整数相除,除数为零。 ● ClassCastException(强制类型转换异常): 把一个对象 引用转换成一个不合适的类型,如把一个对象引用转换成某 个子类类型。 ● NullPointerException(空引用异常): 需要对象引用时使 用了一个null引用。 ● ArrayIndexOutOfBoundsException(数组下标越界异常): 下标值超出了数组大小。 ● NumberFormatException(数字格式异常): 试图将非数 字格式字符串转换成数值。
这类异常并非因设计或实现引起,是无法避免的。 但一般情况下,程序员应该提供相应的代码捕捉和 处理。
14
受检查的异常和不受检查的异常: 受检查的异常
Exception类及其非RuntimeException子类属于受 检查的异常;
9) System.out.println("After method.");
10) } 11) }
6
Exception in thread "main" ng.ArithmeticException: / by zero at ExceptionDivideBy0.method(ExceptionDivideBy0.java:4) at ExceptionDivideBy0.main(ExceptionDivideBy0.java:8)
一般情况下,程序员可不必理会这类异常,它们 虽然很严重,但很少发生。
12
(2) RuntimeException类及其子类: 表示设计或实现 方面的问题,例如:
● ArithmeticException(算术运算异常): 算术运算时发生 的异常情况,如整数相除,除数为零。 ● ClassCastException(强制类型转换异常): 把一个对象 引用转换成一个不合适的类型,如把一个对象引用转换成某 个子类类型。 ● NullPointerException(空引用异常): 需要对象引用时使 用了一个null引用。 ● ArrayIndexOutOfBoundsException(数组下标越界异常): 下标值超出了数组大小。 ● NumberFormatException(数字格式异常): 试图将非数 字格式字符串转换成数值。
2024年度Java语言ppt课件(完整版)

27
JDBC数据库连接技术
JDBC基本概念
JDBC(Java Database Connectivity)是Java语言中用 于访问关系型数据库的标准API。 它提供了一组用于连接数据库、 执行SQL语句和处理查询结果的 接口和类。
JDBC驱动程序
JDBC驱动程序是实现JDBC API 的数据库访问软件,用于建立 Java应用程序与数据库之间的连 接。不同的数据库厂商会提供不 同的JDBC驱动程序,以支持对自 己数据库的访问。
2024/3/23
29
Spring框架概述及核心思想
2024/3/23
01
Spring框架是一个轻量级的控制反转(IoC)和面向切面(AOP)的 容器框架。
02
Spring框架的核心思想是降低耦合度,提高系统的可维护性和
可扩展性。
Spring框架提供了丰富的功能,如事务管理、Web MVC、数
03
要点二
Servlet生命周期
Servlet的生命周期包括加载、初始化 、处理请求、销毁四个阶段。在Web 应用启动时,Servlet被加载并初始化 ,然后一直驻留在内存中等待处理请 求,直到Web应用停止或被卸载时, Servlet才会被销毁。
要点三
Servlet API
Servlet API是一组Java接口和类,用 于支持Servlet的开发和运行。它提供 了处理HTTP请求和响应、管理会话 、读写Cookie等功能。
Thread类
Java中的线程类,可以通过继承 Thread类并重写run()方法来实现多线
程程序。
Callable接口
2024/3/23
与Runnable接口类似,但Callable接 口可以返回执行结果并且可以抛出异
JDBC数据库连接技术
JDBC基本概念
JDBC(Java Database Connectivity)是Java语言中用 于访问关系型数据库的标准API。 它提供了一组用于连接数据库、 执行SQL语句和处理查询结果的 接口和类。
JDBC驱动程序
JDBC驱动程序是实现JDBC API 的数据库访问软件,用于建立 Java应用程序与数据库之间的连 接。不同的数据库厂商会提供不 同的JDBC驱动程序,以支持对自 己数据库的访问。
2024/3/23
29
Spring框架概述及核心思想
2024/3/23
01
Spring框架是一个轻量级的控制反转(IoC)和面向切面(AOP)的 容器框架。
02
Spring框架的核心思想是降低耦合度,提高系统的可维护性和
可扩展性。
Spring框架提供了丰富的功能,如事务管理、Web MVC、数
03
要点二
Servlet生命周期
Servlet的生命周期包括加载、初始化 、处理请求、销毁四个阶段。在Web 应用启动时,Servlet被加载并初始化 ,然后一直驻留在内存中等待处理请 求,直到Web应用停止或被卸载时, Servlet才会被销毁。
要点三
Servlet API
Servlet API是一组Java接口和类,用 于支持Servlet的开发和运行。它提供 了处理HTTP请求和响应、管理会话 、读写Cookie等功能。
Thread类
Java中的线程类,可以通过继承 Thread类并重写run()方法来实现多线
程程序。
Callable接口
2024/3/23
与Runnable接口类似,但Callable接 口可以返回执行结果并且可以抛出异
java-异常处理

No
Im 第5章 异a 常处g 理 e
5.1 程序错误与处理
5.2 Java的异常处理
3
第3页,共45页。
No
Im 5.1 程序a 错误g 与处理e
5.1.1 程序错误、发现时刻及错误处理原则
5.1.2 面向过程语言与面向对象语言 的错误处理方式比较
5.1.3 Java的错误和异常
4
第4页,共45页。
System.out.println(str.length());
//调用空对象的方法,产生空对象异常
25
第25页,共45页。
No Image
5.2.1 异常类说明
2. RuntimeException 运行异常类
例如:输入数据格式错、除数为0错、 给变量赋予超出其范围的值等。
发现和排除:
Java解释器在运行时能够发现语义错,一旦发现了语义错,
Java将停止程序运行,并给出错误的位置和性质。
6
第6页,共45页。
No Image
5.1.1 程序错误、发现时刻及错误处理原则
3. 逻辑错 —logic error
②运行时不能发现浮点数除法中除数为0的语义错。
System.out.println(""+(3/0.0));
//浮点数除法,除数为0,没有抛出异常,运行结果为Infinity(无穷大)
18
第18页,共45页。
No Image
5.1.3 Java的错误和异常
【例5.2】发现数组下标越界的语义错。
public class Outofbounds
第15页,共45页。
事后处理 异常处理
15
No Image
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java的异常处理机制
1、抛出异常
• 当正在运行的程序或JVM发现异常时, 会创建一个代表该异常事件的异常对 象,然后将该对象传递给Java运行时 系统。这一过程被称为抛出异常 (Throw Exceptions)。
2、捕获异常
• 得到一个异常对象后,Java运行时系统 会自动地寻找处理该异常的代码。寻找 过程从抛出异常的方法开始,如果找不 到,则沿着方法的调用栈逐层回说溯, 直到发现能处理该类型异常的代码,然 后Java运行时系统把该异常对象传递给 这个代码处理。这一过程被称为捕获异 常(Catch Exceptions)。
异常 Exception
1. 什么是异常 2. Java的异常处理机制 3. 异常的分类 4. 对checked异常的处理
什么是异常 ?
• 异常 是指在程序执行时出现的、中断 正常指令流的事件。
ClassNotFoundException NoSuchMethodException
ArithmeticException NullPointerException FileNotFoundException
异常的分类
Error、Exception、RuntimeException
checked异常的处理
Checked Exception
• 编译器强制要求处理 • 非RuntimeException
• 处理办法: (1)使用try-catch-finally语句捕获
或
(2) 使用throws子句,声明抛弃
方法调用栈
捕获异常
参考代码
Java异常处理的优点
1. 分离“正常”代码和异常处理 代码 2. 将异常对象沿着调用栈传递 3. 分门别类的处理异常
“正常”指令流
readFile { open the file; determine its size; allocate that much memory; read the file into memory; close the file; }
//使用异常处理机制 readFile { try { open the file; determine its size; allocate that much memory; read the file into memory; close the file; } catch (fileOpenFailed) { doSomething; } catch (sizeDeterminationFailed) { doSomething; } catch (memoryAllocationFailed) { doSomething; } catch (readFailed) { doSomething; } catch (fileCloseFailed) { doSomething; }
//考虑异常事件,但不使用异常处理机制 readFile { initialize errorCode = 0; open the file; if (theFileIsOpen) { determine the length of the file; if (gotTheFileLength) { allocate that much memory; if (gotEnoughMemory) { read the file into memory; if (readFailed) { errorCode = -1; } } else { errorCode = -2; } } else { errorCode = -3;
找不到类 找不到方法
算数异常 空指针异பைடு நூலகம் 找不到文件
IndexOutOfBoundsException 下标越界
StackOverflowError
OutOfMemoryError
堆栈溢出
内存溢出
考虑异常?
• 练习题或个人作品
可以只考虑正常的程序流程
• 商业开发(企业级):
必须在程序中考虑各种异常事件,以 获得健壮性。