javaj基础————异常处理课件

上传人:aa****6 文档编号:54865398 上传时间:2018-09-20 格式:PPT 页数:44 大小:151KB
返回 下载 相关 举报
javaj基础————异常处理课件_第1页
第1页 / 共44页
javaj基础————异常处理课件_第2页
第2页 / 共44页
javaj基础————异常处理课件_第3页
第3页 / 共44页
javaj基础————异常处理课件_第4页
第4页 / 共44页
javaj基础————异常处理课件_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《javaj基础————异常处理课件》由会员分享,可在线阅读,更多相关《javaj基础————异常处理课件(44页珍藏版)》请在金锄头文库上搜索。

1、异常(Exception),程序的错误通常包括: 语法错误:指程序的书写不符合语言的语法规则,这类错误可由编译程序发现。 逻辑错误:指程序设计不当造成程序没有完成预期的功能,这类错误通过测试发现。 运行异常:指由程序运行环境问题造成的程序异常终止,如打开不存在的文件进行读操作、程序执行了除以0的操作。 Java运行时错误称为异常。,1 什么是异常?(一),1 什么是异常?(二),异常(Exception)又称为例外,是指在程序运行过程中发生的非正常事件,这些事件的发生会影响程序的正常执行。如: 进行数学中“无意义”的运算,例如除数为零、对负数求对数平方根等 对数组进行操作时,超出了数组的最大下

2、标 程序所需进行的I/O操作不能正常执行,如所需访问的文件不存在 内存耗尽无法进行类的实例化 JVM崩溃,2 为什么要异常处理?,对于任何语言的程序设计而言,错误的发生总是不可避免的为了加强程序的健壮性,程序设计时,必须充分考虑错误发生的可能性,并建立相应的处理机制。,3、异常对象,在Java语言中,我们用异常对象来表示不同的异常。 所谓Java异常对象就是一个存放着相关错误信息的对象,如果方法运行时产生了异常,该方法就可以抛出一个异常对象 为了表示不同种类的异常,Java语言中定义了许多异常类。,例子程序,public class ExampleOfException String line

3、s = “The first line“,“The second line“,“The last line“;public static void main (String args) ExampleOfException eoe = new ExampleOfException();eoe.methodA();System.out.println(“Program finished.“);void methodA() methodB();void methodB() methodC();void methodC() for (int i=0; i4; i+) System.out.print

4、ln (linesi); ,The first line The second line The last line Exception in thread “main“ java.lang.ArrayIndexOutOfBoundsException: 3at ExampleOfException.methodC(ExampleOfException.java:16)at ExampleOfException.methodB(ExampleOfException.java:12)at ExampleOfException.methodA(ExampleOfException.java:9)a

5、t ExampleOfException.main(ExampleOfException.java:6),4 Java中的异常类,在Java语言中,任何的异常对象都是Throwable类的直接子类或间接子类的实例。Java的类库已经提供了一些常见的异常类,如果这些异常类不能够满足要求,用户也可以创建自己的异常类。,5 Exception类,Exception的子类表示了不同类型的异常,例如RuntimeException表示运行时异常,而IOException表示I/O问题引起的异常。 这些子类也可以被继承以对不同类型的异常进行细分,如RuntimeException还可细分为NullPoin

6、terException、ArithmeticException等;IOException还可细分为FileNotFoundException、EOFException等。,常见的异常类,ArithmeticException ArrayIndexOutOfBandsException IOException FileNotFoundException NullPointerException NumberFormatException,6 Error类,Error类表示Java运行时产生的系统内部错误或资源耗尽等严重错误。 这种错误通常是程序无法控制和解决的,如果发生这种错误,通常的做法是通

7、知用户并中止程序的执行。,常见的错误类,NoClassDefFoundError OutOfMemoryError VirtualMachineError,7 必检异常与非必检异常,RuntimeException类及其子类被称为“运行时异常” 一般发生在JRE内部 也称“非必检异常” 如NullPointerException 其他异常被成为“非运行时异常” 一般发生在JRE外部 也称“必检异常” 如IOException,8 异常处理的一般步骤,异常抛出异常捕获异常处理,8.1 抛出异常(一),方法中需要抛出异常时,可使用throw语句实现,具体步骤应该是: 选择合适的异常类; 创建该类的

8、一个对象; 使用throw语句抛出该对象。,8.1 抛出异常(二),例如,某方法readFile()对文件进行读操作,根据前面章节的介绍可以知道:当进行I/O操作时,可能会产生I/O异常。所以,在方法readFile中如果读文件操作不成功,则应抛出I/O异常。如下列程序片断所示:,readFile() throws IOExceptionif (读文件不成功)throw new IOExcepion(); ,8.1 抛出异常(三),如果一个方法可能抛出多个必检异常,那么必须在方法的声明部分一一列出,多个异常间使用逗号进行分隔:,Class MyClass public myMethod(Str

9、ing s) throws IOException, MalformedURLException ,8.1 抛出异常(四),一个方法必须通过throws语句在方法的声明部分说明它可能抛出而并未捕获的所有的“必检异常”,如果没有这么做,将不能通过编译。 值得注意的是:如果在子类中覆盖了父类的某一方法,那么该子类方法不可以比被其覆盖的父类方法抛出更多的异常(但可以更少)。所以,如果被覆盖父类的方法没有抛出任何的“必检异常”,那么子类方法绝不可能抛出“必检异常”。,8.1 抛出异常(五),在下面的例子里,对于父类SuperClass而言,类SubClassA是正确的子类,而SubClassB则是错误

10、的。,class SuperClasspublic superMethod() throws EOFException class SubClassA extends SuperClass /正确public superMethod() class SubClassB extends SuperClass /错误public superMethod() throws FileNotFoundException ,8.2 异常的捕获(一),要捕获一个异常,程序员只需要在程序中设置一个try/catch块,其格式如下:try抛出异常的代码catch (某Exception类型 e)处理该异常类型的

11、代码catch (某Exception类型 e)处理该异常类型的代码,8.2 异常的捕获(二),当try块中的某条代码抛出异常时:首先,自该语句的下一条语句起的所有try块中的剩余语句将被跳过不予执行;其次,程序执行catch子句进行异常捕获,异常捕获的目的是进行异常类型的匹配,并执行与所抛出的异常类型相对应的catch子句中的异常处理代码。,8.2 异常的捕获(三),需要注意的是:如果try块中没有任何的异常抛出,则所有的catch子句将会被跳过;如果try块中所抛出的异常对象类型与所有的catch子句中的所声明的异常类型都不匹配,则方法会立即中止,并将该异常对象继续抛出,沿调用堆栈传递。,

12、example,public class ExampleOfException String lines = “The first line“,“The second line“,“The last line“;public static void main (String args) ExampleOfException eoe = new ExampleOfException();eoe.methodA();System.out.println(“Program finished.“);.void methodC() for (int i=0; i4; i+) try System.out

13、.println (linesi); catch (ArrayIndexOutOfBoundsException e) System.out.println(“Re-setting Index Value“); ,example,上面的例子中可能会产生数组越界异常,所以将其置于try块中,并在catch子句中对ArrayIndexOutOfBoundsException类型的异常进行捕获,并进行处理。 如果try块中可能抛出多个类型的异常,程序员可以使用多个catch子句对这些异常进行捕获,每种异常类型对应一个单独的catch子句。 需要注意的是,这些catch子句是顺序执行的。这意味着,异常

14、对象总是被第一个catch子句首先捕获,如果类型不匹配,才会执行下一个catch子句。读者可以试着分析下面的程序片断,看看有什么样的问题存在。,问题,Java运行系统从上到下分别对每个catch语句处理的例外类型进行检测,直到类型匹配为止; catch语句的排列顺序应该是从子类到父类,try catch(Exception e) catch(IOException e) catch(ArrayIndexOutOfBoundsException e) ,finally,当一个方法的某条语句抛出异常后,该方法剩余的语句将无法继续执行。这种情况下,方法往往无法将其占用的资源进行释放。 解决方法: 在

15、每个catch子句的异常处理代码中也加上资源释放的代码,但这种方法非常麻烦; Java语言的异常处理机制中提供了一个更好的方案程序员可以使用finally子句来统一进行资源释放之类的工作。,finally,finally子句的一般格式:,try抛出异常的代码catch (某Exception类型 e)处理该异常类型的代码catch (某Exception类型 e)处理该异常类型的代码finally最后一定会被执行的代码,finally,不论try块中的代码是否抛出异常及异常是否被捕获,finally子句中的代码一定会被执行: 如果try块中没有抛出任何异常,当try块中的代码执行结束后,fin

16、ally中的代码将会被执行; 如果try块中抛出了一个异常且该异常被catch正常捕获,那么try块中自抛出异常的代码之后的所有代码将会被跳过,程序接着执行与抛出异常类型匹配的catch子句中的代码,最后执行finally子句中的代码。 如果try块中抛出了一个不能被任何catch子句捕获(匹配)的异常,try块中剩下的代码将会被跳过,程序接着执行finally子句中的代码,未被捕获的异常对象继续抛出,沿调用堆栈顺序传递。,问题,当调用上述方法m()时,try块中包含方法的return语句,返回值为1。然而,实际调用该方法后产生的返回值为0。这是因为在方法实际返回并结束前,finally子句中的内容无论如何要被执行,所以finally子句中的return语句使得该方法最终实际返回值为0。,public int m()try return 1;finallyreturn 0; ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号