第五章Java的异常处理
第05章 异常处理

5.5 自定义异常类
例5.6 自定义异常类.
class OverflowException extends Exception //自定义异常类 { public void printMsg() { System.out.println("exception: "+this.getMessage()); this.printStackTrace(); System.exit(0); } } public class Try7 { public void calc(byte k) throws OverflowException //抛出异常
5.1.1 错误与异常
致命性的错误:如果程序进入了死循环,或递归无法 结束,或内存溢出,这些现象称为错误 错误.错误只能在 错误 编程阶段解决,运行时程序本身无法解决,只能依靠 其它程序干预,否则会一直处于非正常状态. 非致命性的异常:如果运算时除数为0,或操作数超出 0 数据范围,或打开一个文件时发现文件不存在,或欲 装入的类文件丢失,或网络连接中断等,这些现象称 为异常 异常.在源程序中加入异常处理代码,当程序运行 异常 中出现异常时,由异常处理代码调整程序运行方向, 使程序仍可继续运行直至正常结束.
《Java2程序设计实用教程》叶核亚
1.异常的产生
例5.1 产生数组下标越界异常和除数为0异常.
public class Try1 { public static void main (String args[]) { int i=0; int a[] = {5,6,7,8}; for(i=0;i<5;i++) System.out.println(" a["+i+"]="+a[i]); System.out.print("3/0="+(3/0)); } }
第五章—异常处理

王卓峥 wangzhuozheng@
1
异常处理
异常的概念 异常处理方法 自定义异常类
2
异常的概念
概念:在程序运行时打断正常程序流程的任 何不正常的情况称为错误或异常
出现异常
试图打开的文件不存在 网络连接中断 操作符越界 加载的类找不到
[举例] P159 例6-2
6
将方法中产生的异常抛出
声明异常
returnType methodName([paramList]) throws exceptionList
exceptionList可包含多个异常类型,用逗号隔 开
适用场合
方法中调用了抛出异常的方法 方法体中生成并抛出异常对象 P163
[举例] P163 例6-5
7
自定义异常类
何时自定义异常类
Java异常类体系中不包含所需的异常类型 用户需要将自己所提供类的异常与其他人提供
类的异常进行区分 类中将多次抛出这种类型的异常 如果使用其它程序包中定义的异常类,将影响
程序包的独立性与子包含性
[举例] P167 例6-6
8
作业:2、4、5(编程验证)
9
[举例] P155 例6-1
3
异常类层次
P156 Error与Exception
不可恢复与可恢复 不可处理与可处理
4
异常处理方法
捕获并处理异常
好像trap try-catch-finally
将方法产生的异常抛出
好像transfer methodDeclaration throws Exception
5
捕获并处理异常
try-catcBiblioteka -finally语句try{ java statements;
JAVA教程(程序异常处理)(精)

程序异常处理引子O在调试航班体息录入程冲•时.町能会遇到这歼的情爲:应用程斤运行过程中.突然中止,屛棗上出现一丸堆英丈让人不知所培・o崔许多域市.很行ATM机随处可见,取歇非常方使•崔ATM机上取欲必须扶輒一定钓步裝携作.若挨作出会相应的災示传息.指导你下一步地楼作.比如密码输入错谖.ATM机将会显示诗码输入错谋・请重新输入”的消息•如是三次密碣伦入梆有谋.則呑卡没商量.o尢论什么斥因引起的程斤运行不正常.都认为是悝序出现了并常.知识要点。
异常的概念。
常见的异常情况。
异常处理的机制◎利用try catch finally实现异常处理o利用thro灵throws创建用户自定义异常知识学习一异常概念。
异常一血巾把程序运行中可能遇到的错罠分为两类.一类是非致命的.的过某种修正后程号还能键续执行.这类捲谖称为异常.边是一类特殊的运行错误対象. 另一类是致命的.即程序遇到了非常严重的不正常状态,不能简单地恢复轨行,这就是钳渓.叩异常类基类throwablcift生出两个子类:Error类:定义了Java程序运行时出现了灾难性失败的畀常.一股来说java程序不捕获也不拋出^Error的对象(包把动态磁接失败.虛拟机错逞等)•而只处理Except ion类的各子类对Exception类:定义了程序可以捕捉到的异常。
异営分两类:1)条统定义的2)用户定义的;・:・异常处理一对于异常,Java使用一种错误捕获方法进行) 处理,称为异常处理. 1斗处理异常的两种方式-是将异常交田Jam异常处理机制的预设处理方法来处理。
二是利用Java提供的try-cat ch-final ly语句对于㊁能出现的异常作预先处理。
"融辜习一程序运行的错误类型及位置识学习程序ArithmeticException 算术异常整数除法中,如果除数为0,则发生该类井常.Java虛拟机遇到这样的错i昊时会中止程序的执行流程,并新建~个ArithmeticException类的对象.即拋出一个算术运算异常.例如下面的程序将引发ArithmeticException异常:public class Test ArithmeticExceptionfpublic static void main(String args[])(int denominator=0,numerator=20jesult=0;resultanumerator/denominator;〃除数为0,将引发ArithmeticException异席System.out.prlntln(result);知识学习一程序运行的错误类型及位置NullPointerExcept ion异常发生的原因.通常是由于应用程序企图在某个需要的对鮫上使用mil I值。
java的异常处理机制名词解释

java的异常处理机制名词解释在Java开发过程中,异常处理机制是一项重要的功能。
它允许我们在程序中正确处理异常情况,使程序能够更加健壮。
本文将围绕Java的异常处理机制展开,逐步分析其中的名词解释。
1. 异常在Java中,异常指的是在程序执行过程中发生的一些错误或不正常的情况。
这些情况可能是由于用户输入的不正确或系统资源不足等原因所导致。
当程序发生异常时,程序流程将会被中断并转入异常处理程序进行处理。
2. 异常分类Java中的异常分为两类:受检异常和非受检异常。
受检异常是在编译期就可以检测到的异常,编译器强制要求程序去处理这些异常。
而非受检异常不需要强制要求程序去处理,通常是由程序逻辑错误引起的。
3. 异常处理器异常处理器是一段特殊的程序,用于捕获并处理异常。
在Java 中,异常处理器通常使用try-catch语句块来实现。
当程序执行到try 语句块时发生异常,程序将转入catch语句块并进行异常处理。
4. 抛出异常当程序执行发生异常时,可以使用throw语句抛出异常。
throw 语句通常包括一个异常对象,用于说明发生的异常类型。
5. 自定义异常在Java中,我们可以自定义异常来处理我们自己的异常情况。
自定义异常需要继承自Exception类或者RuntimeException类。
通过自定义异常,我们可以将一些通用的异常情况封装起来,提高程序的可读性和可维护性。
6. finally块finally块是try-catch语句块的可选部分,用于在无论是否发生异常都要执行的代码。
finally块通常用于释放资源或进行清理操作。
7. try-with-resources语句try-with-resources语句是Java 7中新增的语法,用于自动关闭资源。
这种语句会自动将在try语句块中声明的资源关闭,无需手动关闭。
这在程序中可以简化代码,提高程序的可读性和可维护性。
通过以上分步骤阐述,我们深入了解了Java的异常处理机制,并对其中的名词解释有了更加清晰的认识。
Java中的异常处理和断言机制

Java中的异常处理和断言机制在软件开发过程中,我们常常会遇到各种错误和异常情况。
为了保证程序的稳定性和可靠性,Java提供了异常处理和断言机制。
异常处理是一种处理异常情况的方式。
在程序执行过程中,如果出现了异常,系统会抛出相应的异常对象。
我们可以使用try-catch 语句块来捕获并处理这些异常。
try语句块是重点执行的代码块,catch语句块用于捕获并处理指定类型的异常。
如果try语句块中的代码发生了异常,系统会跳过try块中后续的代码,然后进入catch块进行异常处理。
在catch块中,我们可以根据实际需求进行处理,例如输出异常信息、记录日志、回滚事务等。
同时,Java还提供了finally块,用于定义无论是否出现异常,都需要执行的代码。
除了try-catch语句块,我们也可以使用throws关键字来声明异常。
当方法的实现可能会抛出某些异常时,我们可以使用throws关键字在方法签名中声明这些异常。
这样,在调用该方法时,我们必须要么使用try-catch语句块来捕获这些异常,要么在调用方法的上一级方法中继续使用throws关键字声明这些异常。
这种方法使得异常的处理更加灵活,可以将异常的处理逻辑推迟到调用方。
断言机制是一种用于调试和测试的机制。
断言是一种声明,用于在程序中插入一些检查语句,以确保程序的正确性。
在Java中,我们可以使用assert关键字来定义断言。
断言语句由关键字assert、一个boolean表达式和一个可选的消息组成。
当断言语句的结果为false时,系统会抛出一个AssertionError异常。
断言主要用于进行一些前提条件的检查,用于确保程序的正确性,并在出现错误时及早发现和处理。
在调试和测试阶段,我们可以开启断言功能,确保程序按照我们预期的方式执行。
而在生产环境中,我们可以关闭断言功能,从而提高程序的性能。
总之,在Java中,异常处理和断言机制是保证程序稳定性和可靠性的重要工具。
简述java中异常处理机制的流程。

Java是一种面向对象的编程语言,所以在编写Java程序时需要考虑异常处理。
异常是指在程序运行过程中出现的错误、故障或意外情况,而异常处理机制则是为了保证程序在遇到异常时能够正确、有效地进行处理,确保程序的稳定性和安全性。
1. 异常的分类在Java中,异常分为受检异常(Checked Exception)和非受检异常(Unchecked Exception)。
受检异常是指在编译期就能够被检测到的异常,需要进行显式的处理;非受检异常则是指在运行期才能被检测到的异常,通常是由程序错误造成的,需要进行相应的处理。
2. 异常处理机制的流程在Java中,异常处理机制主要涉及到try、catch、finally和throw关键字的使用。
(1) try块:在try块中编写可能会引发异常的代码。
如果在try块中出现了异常,程序会立即跳转到catch块进行相应的异常处理。
(2) catch块:在catch块中定义对异常的处理逻辑。
在catch块中可以针对不同类型的异常编写不同的处理代码,也可以进行异常的记录、打印或其他操作。
(3) finally块:finally块中的代码无论是否出现异常都会被执行。
通常在finally块中释放资源、关闭文件等清理工作。
(4) throw关键字:throw关键字用于手动抛出一个异常。
当程序中的某个条件不满足时,可以使用throw关键字抛出一个异常,然后交由catch块进行处理。
3. 异常处理机制的应用在实际的Java编程中,异常处理机制是非常重要的。
通过合理地编写异常处理代码,可以提高程序的容错性和稳定性,保证程序在面对异常时能够优雅地处理并继续执行。
另外,Java中还提供了一些与异常相关的类,例如Throwable、Exception和RuntimeException等,开发人员可以根据实际需求选择合适的异常类来进行处理。
异常处理机制是Java程序设计中不可或缺的重要部分,合理并且规范地使用异常处理机制能够提高程序的可靠性和稳定性,也能让程序更加健壮。
Java程序设计第5章异常处理

Exception类从父类 Exception类从父类Throwable那里 类从父类Throwable那里 还继承了若干方法, 还继承了若干方法,其中常用的方 法如下。 法如下。 (1)public String toString () toString ()方法返回描述当前 ()方法返回描述当前 Exception类信息的字符串 Exception类信息的字符串。 类信息的字符串。 (2)public void printStackTrace ()
•Exception类有若干子类,每一个子类代 Exception类有若干子类 类有若干子类, 表了一种特定的运行时错误。 表了一种特定的运行时错误。这些子类 有些是系统事先定义好并包含在Java类 有些是系统事先定义好并包含在Java类 库中的,称为系统定义的运行异常。 库中的,称为系统定义的运行异常。 •系统定义的运行异常通常对应着系统运 行错误。 行错误。由于这种错误可能导致操作系 统错误甚至是整个系统的瘫痪, 统错误甚至是整个系统的瘫痪,所以需 要定义异常类来特别处理。 要定义异常类来特别处理。下表中列出 了若干常见的系统定义异常。 了若干常见的系统定义异常。
–系统自动抛出异常
所有系统定义的运行异常都可以 由系统自动抛出。下面的例7.3程 由系统自动抛出。下面的例7.3程 序将测试数组下标越界时出现的 异常。 异常。通过这个例子可以了解如 何使用系统定义的运行异常。 何使用系统定义的运行异常。
系统自动抛出异常。 【例5.3】系统自动抛出异常。
注意: 注意:
用户自定义异常用来处理程序中 可能产生的逻辑错误, 可能产生的逻辑错误,使得这种 错误能够被系统及时识别并处理, 错误能够被系统及时识别并处理, 而不致扩散产生更大的影响, 而不致扩散产生更大的影响,从 而使用户程序更为强健,有更好 而使用户程序更为强健, 的容错性能, 的容错性能,并使整个系统更加 安全稳定。 安全稳定。
Java程序设计(高校系列教材课件).ppt

1.21
高等学校计算机应用人才培养系列教材
常量、关键字和标识符
常量
常量代表某一特定类型的具体值,常量有数字常量、 布尔常量、字符常量和字符串常量之分。
数字常量包括两种:整型常量和浮点型常量。常用的 整型常量都是十进制的。整型常量还有另外两种进制 ,八进制和十六进制。在Java中,八进制的值通过在 它的前面加一个前导0来表示,而通过前导的0x或0X来 表示一个十六进制的值。
) 分布式(Distributed)
高等学校计算机应用人才培养系列教材
1.7
Java和Internet
在使用Java时,用户将从Internet下载Java字节码并在自 己的计算机上运行。在Web网页中运行的Java程序叫做 Applet。要使用Applet,需要有支持Java的浏览器,它可 以解释字节码。
True或false
1.19
高等学校计算机应用人才培养系列教材
Java的数据类型和变量
变量
变量是Java的一个基本存储单元。在Java中,在使用变量之前需要先 声明变量。变量声明通常包括三部分:变量类型、变量名、初始值, 其中变量的初始值是可选的。
以下是几个各种变量声明的例子,有一些包括了变量的初始化。
char
boolean
所占用字节数 1 2 4 8 4 8
2
1
范围 -128到127 -32,768到32, 767 -2,147,483,648到2,147,483,647 -9,223,372,036,854,775,808到 -9,223,372,036,854,775,807 大约 ±3.4+38 大约 ±1.7E+308
1.10
高等学校计算机应用人才培养系列教材
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
常对象。这个异常对象包括错误的类型,错误出现时程序的运行状态以
及对该错误的详细描述。下面我们先看一个简单的例子。
❖ 例5.1
❖ public class ExceptionDemo {
❖ public static void main(String args[]) {
❖
int x=100;
❖
System.out.println("The
for (int i=0; i<4; i++)
System.out.println (lines[i]);
}
}
Java中的异常类
Throwable
Exception
Error
RuntimeException …… IOException VirtualMachineError ……
NullPointerException ArithmeticException …… FileNotFoundException ……
方法的调用堆栈
methodC() 调
methodB() 用
methodA() main()
❖ Java程序在执行的过程中,形成了一个先进后出的 调用堆栈,各方法之间依照调用先后的不同,由先 至后的进入调用堆栈,堆栈的最上层即是当前被调 用执行的方法。该方法执行完毕后,会将处理器控 制权交还给调用他的方法,依此类推。
...
异常(Throwable)分类
❖ Error
动态链接失败,虚拟机错误等,通常Java程序不 应该捕获这类异常,也不会抛出这种异常。
❖ Exception
运行时异常 继承于RuntimeException。Java编译器允许程 序不对它们做出处理。
非运行时异常 除了运行时异常之外的其他由Exception继承 来的异常类。Java编译器要求程序必须捕获或 者声明抛出这种异常。
5.1 什么是异常
❖ 异常(Exception)又称为例外,是指在程 序运行过程中发生的非正常事件,它会中断 指令的正常执行,影响程序的正常运行。
异常对象
❖ 在Java语言中,我们用异常对象来表示不同 的异常。
❖ 所谓Java异常对象就是一个存放着相关错误 信息的对象,如果方法运行时产生了异常, 该方法就可以抛出一个异常对象
功能描述 初始化某类检测到类的循环调用错误 非法类格式错误 非法访问错误 非兼容类更新错误 系统内部错误 链接错误 运行系统找不到被引用类的定义
NoSuchFieldError NoSuchMethodError OutofMemoryError UnknownError UnsatisfiedLinkError VerifyError VirtualMachineError InstantiationError
is"+x/10);
result
❖
System.out.println("Divided by
zero: "+x/0); } }
❖ 当我们对其编译后运行时,其对应的结 果如下:
c:\jbuilder3\java\bin>java Exception Demo The result is10 Exception in thread "main" ng.Arithmetic Exception: / by zero
第五章 Java的异常处理
为什么要异常处理?
❖ 对于任何语言的程序设计而言,错误的发生总是不可避免的.
❖ 比如说:
❖
① 用户输入出错
❖
② 所需文件找不到
❖
③ 运行时磁盘空间不够
❖
④内存耗尽无法进行类的实例化
❖
⑤ 算术运算错 (数的溢出,被零除…)
❖
⑥ 数组下标越界
⑦JVM崩溃❖源自……❖当Java程序出现以上的错误时,就会在所处的方法中产生一个异
例程
public class ExampleOfException {
String[] lines = {"The first line",
"The second line","The last line"};
publicThsetfairtsitclinveoid main (String[] args) {
表5.1 Java常见错误列表
类名 ClassCircularityError ClassFormatError IllegalAccessError IncompatibleClassChan gError InternalError LinkageError NoClassDefFoundError
}
at ExampleOfException.methodA(ExampleOfException.java:9)
void methaotdEB(xa)m{pleOfException.main(ExampleOfException.java:6)
methodC();
}
void methodC() {
IndexOutofBoundException ArrayIndexOutofBoundsExceptio n StringIndexOutofBoundsExcepti on ClassCastException
NegativeArraySizeException
NullPointerException
中断异常(常常应用于线程操作中) 输入流中遇到非正常的EOF标志 指定文件找不到 URL格式不正确 网络协议异常 Socket操作异常 给定的服务器地址无法解析 网络请求服务出错 UTF格式字符串转换出错 企图实例化接口或抽象类 找不到指定的方法
表5.3 Java常见的运行异常列表
类名
ArithmeticException
} ng.ArrayIndexOutOfBoundsException: 3
void methaotdEA(xa)m{pleOfException.methodC(ExampleOfException.java:16)
methodBa(t)E;xampleOfException.methodB(ExampleOfException.java:12)
方法调用堆栈中异常对象的传递
调
methodC()
传
methodB()
用
methodA()
递
main()
❖ 当某一方法中的一个语句抛出一个异常时,如果该方法中没 有处理该异常的语句,那么该方法就会中止执行,并将这个 异常传递给堆栈中的下一层方法,直到某一方法中含有处理 该异常的语句为止。如果该异常被传递至主方法,而主方法 中仍然没有处理该异常的语句,则异常将会被抛至JVM,程 序中断。
❖ ArithmeticException ❖ ArrayIndexOutOfBandsException ❖ IOException ❖ FileNotFoundException ❖ NullPointerException ❖ NumberFormatException
表5.2 Java常见的一般异常列表
功能描述 算术运算除数为零 下标越界错误 数组元素下标越界错误 字符串下标越界错误 类型强制转换异常 数组的长度为负异常 非法使用空指针异常
NumberFormatException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException EmptyStackException NoSuchElementException SecurityException
❖ 为了表示不同种类的异常,Java语言中定义 了许多异常类。
5.2 异常处理机制
❖ 异常处理的一般步骤:
异常抛出异常捕获异常处理
异常处理机制
❖ 在Java程序的执行过程中,如果出现了异常 事件,就会生成一个异常对象。
❖ 生成的异常对象将传递给Java运行时系统, 这一异常的产生和提交过程称为抛出(throw) 异常。
类名 IllegalAccessException ClassNotFoundException CloneNotSupportException IOException InterruptedIOException
非法访问异常
功能描述
指定类或接口不存在异常
对象使用clone方法而不实现cloneable接口 输入/输出异常 中断输入/输出操作异常
ExamTphleesOefcEoxncdeplinteion eoe = new ExampleOfException();
eoe.Tmheetlhaosdt Alin()e;
SystEexmc.eoputito.npirnitnhtreland(""Pmraoing"ram finished.");
InterruptedException EOFException FileNotFoundException MalformedURLException ProtocolException SocketException UnknownHostException UnknownServiceException UTFDataFormatException InstantiationException NoSuchMethodException
ArithmeticException
.....
IndexOutOfBounds.
RuntimeException InterruptedException
Exception IOException