第五章Java的异常处理
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例程
public class ExampleOfException {
String[] lines = {"The first line",
"The second line","The last line"};
publicThsetfairtsitclinveoid main (String[] args) {
方法的调用堆栈
methodC() 调
methodB() 用
methodA() main()
❖ Java程序在执行的过程中,形成了一个先进后出的 调用堆栈,各方法之间依照调用先后的不同,由先 至后的进入调用堆栈,堆栈的最上层即是当前被调 用执行的方法。该方法执行完毕后,会将处理器控 制权交还给调用他的方法,依此类推。
❖ 这些子类也可以被继承以对不同类型的异常 进行细分,如RuntimeException还可细分 为NullPointerException、 ArithmeticException等;IOException还 可细分为FileNotFoundException、 EOFException等。
典型的异常类
InterruptedException EOFException FileNotFoundException MalformedURLException PBaidu NhomakorabeaotocolException SocketException UnknownHostException UnknownServiceException UTFDataFormatException InstantiationException NoSuchMethodException
功能描述 算术运算除数为零 下标越界错误 数组元素下标越界错误 字符串下标越界错误 类型强制转换异常 数组的长度为负异常 非法使用空指针异常
NumberFormatException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException EmptyStackException NoSuchElementException SecurityException
类名 IllegalAccessException ClassNotFoundException CloneNotSupportException IOException InterruptedIOException
非法访问异常
功能描述
指定类或接口不存在异常
对象使用clone方法而不实现cloneable接口 输入/输出异常 中断输入/输出操作异常
} java.lang.ArrayIndexOutOfBoundsException: 3
void methaotdEA(xa)m{pleOfException.methodC(ExampleOfException.java:16)
methodBa(t)E;xampleOfException.methodB(ExampleOfException.java:12)
for (int i=0; i<4; i++)
System.out.println (lines[i]);
}
}
Java中的异常类
Throwable
Exception
Error
RuntimeException …… IOException VirtualMachineError ……
NullPointerException ArithmeticException …… FileNotFoundException ……
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" java.lang.Arithmetic Exception: / by zero
找不到指定域错误
所调用的方法不存在
内存不足错误
系统无法确认的错误
定义为本地的方法运行时与另外的例程相连接 错误 代码校验错误
虚拟机出错,可能JVM错或资源不足 企图实例化一个接口或抽象类的错误
Exception类
❖ Exception的子类表示了不同类型的异常, 例如RuntimeException表示运行时异常, 而IOException表示I/O问题引起的异常。
第五章 Java的异常处理
为什么要异常处理?
❖ 对于任何语言的程序设计而言,错误的发生总是不可避免的.
❖ 比如说:
❖
① 用户输入出错
❖
② 所需文件找不到
❖
③ 运行时磁盘空间不够
❖
④内存耗尽无法进行类的实例化
❖
⑤ 算术运算错 (数的溢出,被零除…)
❖
⑥ 数组下标越界
⑦JVM崩溃
❖
……
❖
当Java程序出现以上的错误时,就会在所处的方法中产生一个异
异常处理机制
❖ 当Java运行时系统得到一个异常对象时,它 将会寻找处理这一异常的代码。找到能够处 理这种类型的异常的方法后,运行时系统把 当前异常对象交给这个方法进行处理,这一 过程称为捕获(catch)异常。
❖ 如果Java运行时系统找不到可以捕获异常的 方法,则运行时系统将终止,相应的Java程 序也将退出。
Error类
❖ Error类表示Java运行时产生的系统内部错 误或资源耗尽等严重错误。
❖ 这种错误通常是程序无法控制和解决的,如 果发生这种错误,通常的做法是通知用户并 中止程序的执行。
典型的错误类
❖ NoClassDefFoundError ❖ OutOfMemoryError ❖ VirtualMachineError ❖ 。。。。
❖ 为了表示不同种类的异常,Java语言中定义 了许多异常类。
5.2 异常处理机制
❖ 异常处理的一般步骤:
异常抛出异常捕获异常处理
异常处理机制
❖ 在Java程序的执行过程中,如果出现了异常 事件,就会生成一个异常对象。
❖ 生成的异常对象将传递给Java运行时系统, 这一异常的产生和提交过程称为抛出(throw) 异常。
表5.1 Java常见错误列表
类名 ClassCircularityError ClassFormatError IllegalAccessError IncompatibleClassChan gError InternalError LinkageError NoClassDefFoundError
方法调用堆栈中异常对象的传递
调
methodC()
传
methodB()
用
methodA()
递
main()
❖ 当某一方法中的一个语句抛出一个异常时,如果该方法中没 有处理该异常的语句,那么该方法就会中止执行,并将这个 异常传递给堆栈中的下一层方法,直到某一方法中含有处理 该异常的语句为止。如果该异常被传递至主方法,而主方法 中仍然没有处理该异常的语句,则异常将会被抛至JVM,程 序中断。
}
at ExampleOfException.methodA(ExampleOfException.java:9)
void methaotdEB(xa)m{pleOfException.main(ExampleOfException.java:6)
methodC();
}
void methodC() {
ArithmeticException
.....
IndexOutOfBounds.
RuntimeException InterruptedException
Exception IOException
...
FileNotFoundException
AWTException
......
EOFException
❖ ArithmeticException ❖ ArrayIndexOutOfBandsException ❖ IOException ❖ FileNotFoundException ❖ NullPointerException ❖ NumberFormatException
表5.2 Java常见的一般异常列表
功能描述 初始化某类检测到类的循环调用错误 非法类格式错误 非法访问错误 非兼容类更新错误 系统内部错误 链接错误 运行系统找不到被引用类的定义
NoSuchFieldError NoSuchMethodError OutofMemoryError UnknownError UnsatisfiedLinkError VerifyError VirtualMachineError InstantiationError
非法数据格式异常 非法参数异常 非法监视器操作异常 非法线程状态异常 栈空异常,对空栈进行操作 枚举对象不存在给定的元素异常 安全性异常
必检异常与非必检异常
❖ RuntimeException类及其子类被称为“运 行时异常”
5.1 什么是异常
❖ 异常(Exception)又称为例外,是指在程 序运行过程中发生的非正常事件,它会中断 指令的正常执行,影响程序的正常运行。
异常对象
❖ 在Java语言中,我们用异常对象来表示不同 的异常。
❖ 所谓Java异常对象就是一个存放着相关错误 信息的对象,如果方法运行时产生了异常, 该方法就可以抛出一个异常对象
❖ 在Java语言中,任何的异常对象都是Throwable类 的直接子类或间接子类的实例。Java的类库已经提 供了一些常见的异常类,如果这些异常类不能够满 足要求,用户也可以创建自己的异常类。
Throwable
Error
LinkageError VirtualMachineError
AWTError
IndexOutofBoundException ArrayIndexOutofBoundsExceptio n StringIndexOutofBoundsExcepti on ClassCastException
NegativeArraySizeException
NullPointerException
中断异常(常常应用于线程操作中) 输入流中遇到非正常的EOF标志 指定文件找不到 URL格式不正确 网络协议异常 Socket操作异常 给定的服务器地址无法解析 网络请求服务出错 UTF格式字符串转换出错 企图实例化接口或抽象类 找不到指定的方法
表5.3 Java常见的运行异常列表
类名
ArithmeticException
常对象。这个异常对象包括错误的类型,错误出现时程序的运行状态以
及对该错误的详细描述。下面我们先看一个简单的例子。
❖ 例5.1
❖ public class ExceptionDemo {
❖ public static void main(String args[]) {
❖
int x=100;
❖
System.out.println("The
...
异常(Throwable)分类
❖ Error
动态链接失败,虚拟机错误等,通常Java程序不 应该捕获这类异常,也不会抛出这种异常。
❖ Exception
运行时异常 继承于RuntimeException。Java编译器允许程 序不对它们做出处理。
非运行时异常 除了运行时异常之外的其他由Exception继承 来的异常类。Java编译器要求程序必须捕获或 者声明抛出这种异常。
at Exception Demo.main(Exception Demo.java:5)
❖ 其意思是说,本程序执行到语句“System.out.println ("Divided by zero: "+x/0)”时,系统会抛出一个例外, 该例外在Java中定义为Arithmetic Exception (即属于 算术运算例外)。
ExamTphleesOefcEoxncdeplinteion eoe = new ExampleOfException();
eoe.Tmheetlhaosdt Alin()e;
SystEexmc.eoputito.npirnitnhtreland(""Pmraoing"ram finished.");