《javach06.ppt》由会员分享,可在线阅读,更多相关《javach06.ppt(34页珍藏版)》请在三一文库上搜索。
1、2019/6/2,1,Java程序设计 Programming in Java,王文豪 计算机工程学院 ,2019/6/2,2,教材,雍俊海. Java程序设计教程. 北京: 清华大学出版社, 2007.,2019/6/2,3,第 6 章 异常处理、递归和单体程序设计方法,2019/6/2,4,本章总体纲要,异常处理 递归方法 单体(Singleton)程序设计模式,2019/6/2,5,Java 异常处理(Exception)基础,异常(Exception)? 异常(Exception)是正常程序流程所不能处理或没有处理的异常情况或异常事件。 在有些书中,异常也称作例外。 程序在运行期出现的
2、错误,设计良好的程序应该在异常发生时提供处理这些错误的方法,使程序不会因为异常的发生而阻断或产生不可预见的结果,2019/6/2,6,什么时候会发生异常?,数组的下标越界 打开不存在的文件 网络无法连接 操作数超出所要求的范围 少了所需加载的类 除0溢出,2019/6/2,7,异常(Exception)的分类,Error 由java虚拟机生成的,程序对其不做处理 (1)VirtualMachineError 虚拟机错误 OutOfMemoryError 内存溢出错误 StackOverflowError 栈溢出错误 (2) LinkageError 链接错误 NoClassDefNotFoun
3、dError 类定义未找到错误 (3) java.awt.AWTError 图形界面错误,Exception是所有异常的父类,其子类对应了各种各样可能出现的异常事件,一般需要用户显式的声明或捕捉,RuntimeExceptions异常随时都可以发生的异常,其产生频繁,处理麻烦,通常由系统自动检测并将他们交给缺省的异常处理程序(用户可以对其不处理) ArrayIndexOutOfBoundsException NullPointerException 定义了引用,但不指向任何对象(object) ClassCastException,2019/6/2,8,异常的产生,异常可以在执行程序时自动发现
4、并产生,也可以在程序中显式生成,在程序中抛出异常使用throw语句,格式 throw java.lang.Throwaable 类型变量 注意抛出的异常只能是java.lang.Throwaable 类型或其子类型,2019/6/2,9,处理异常的几种常用方法,捕获异常 进行处理 通过语句System.exit()退出应用程序 2. 通过shows转移异常,2019/6/2,10,处理异常(Exception),在try语句块中包含可能会产生异常的语句,后跟一个或多个catch 语句块 每个catch语句块申明其能处理的一种特定类型异常并提供处理方法,当异常发生时,程序会中止当前的流程,根据获
5、取的异常类型去执行相应代码 finally语句块无论是否发生异常都执行 catch语句块与finally语句块不一定同时存在.只要有一个存在就可以,try / 可能会抛出异常的代码 catch (ExceptionType ref) / 异常处理代码 finally / ,Java程序在执行过程中出现异常事件时,会生成一个异常类对象,该异常对象封装了异常事件信息,并将被提交给java运行系统,这个过程称为抛出(throw)异常. Java 运行系统收到这个异常对象,会寻找处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常,格式:,2019/6/2,11,2019/
6、6/2,12,2019/6/2,13,示例,public class J_ExceptionCatch public static void main(String args ) try System.out.println(“try语句块“); throw new Exception( ); catch(Exception e) System.err.println(“catch语句块“); e.printStackTrace( ); finally System.out.println(“finally语句块“); / try-catch-finally结构结束 / 方法main结束 /
7、类J_ExceptionCatch结束,2019/6/2,14,2019/6/2,15,throws 列表(异常转移),示例: public static void g( ) throw new Exception( ); / 方法g结束 该方法在编译时会产生一个错误,java虚拟机要求处理产生的异常,如果不想在该成员方法中立即处理该异常,则可以转移到调用他上一层方法中. 在方法的声明处列出所有的受检异常 返回类型 方法名( 参数列表 ) throws 异常类型1, 异常类型2, / 方法体 在本方法内就可以不处理这些异常 调用该方法的方法就必须处理这些异常 public static voi
8、d g( ) throws exception throw new Exception( ); /,2019/6/2,16,2019/6/2,17,异常处理: 捕捉-或者-声明,如果一个方法调用一个抛出受检异常的方法(含有throws列表的方法),则该方法必须捕捉这些受检异常,或通过throws列表声明这些异常,2019/6/2,18,异常示例,public class J_Exception public static void mb_throwException( ) System.out.println(“产生并抛出ArithmeticException类型的异常“); throw ne
9、w ArithmeticException( ); / 方法mb_throwException结束 public static void mb_catchArrayException( ) try mb_throwException( ); System.out.println(“在try语句块中的多余语句“); catch(ArrayIndexOutOfBoundsException e) System.err.println(“方法mb_catchArrayException捕捉到异常“); finally System.out.println( “方法mb_catchArrayExcep
10、tion的finally语句块“); / try-catch-finally结构结束 System.out.println(“方法mb_catchArrayException运行结束“); / 方法mb_catchArrayException结束,2019/6/2,19,public static void main(String args ) try mb_catchArrayException( ); catch(ArithmeticException e) System.err.println(“方法main捕捉到异常“); finally System.out.println(“方法m
11、ain的finally语句块“); / try-catch-finally结构结束 System.out.println(“异常处理结束“); / 方法main结束 / 类J_Exception结束,2019/6/2,20,自定义异常示例,2019/6/2,21,自定义异常示例,2019/6/2,22,本章总体纲要,异常处理 递归方法 单体(Singleton)程序设计模式,2019/6/2,23,递归,如果在方法定义中直接或间接地调用该方法本身,就称为递归,2019/6/2,24,汉诺塔(Tower of Hanoi)问题,有三根柱子:S、T和E 柱子S上套着n个盘,小盘依次在大盘上面 现在
12、要求: 每次只能将一根柱子最上面的一个盘移动到另一根柱子上 不允许将大盘放在小盘上面 只能利用这三根柱子 将在柱子S上的n个盘移动到柱子E上,2019/6/2,25,示例,/ J_Hanoi.java; 开发者: 雍俊海 / 利用递归求解汉诺塔(Tower of Hanoi)问题的例程。 public class J_Hanoi public static void mb_hanoi(int n, char start, char temp, char end) if (n=1) System.out.println(“将盘从“ + start + “移到“ + end); else mb_h
13、anoi(n-1, start, end, temp); System.out.println(“将盘从“ + start + “移到“ + end); mb_hanoi(n-1, temp, start, end); / if-else结构结束 / 方法mb_hanoi结束 public static void main(String args ) mb_hanoi(3, S, T, E); / 方法main结束 / 类J_Hanoi结束,2019/6/2,26,编译、运行 & 结果,2019/6/2,27,本章总体纲要,异常处理 递归方法 单体(Singleton)程序设计模式,2019/
14、6/2,28,单体程序设计模式,要让一个类只能有一个实例对象,2019/6/2,29,示例,/ 单体类实现例程。 public class J_Singleton private static J_Singleton m_object = new J_Singleton( ); / 定义构造方法: 不允许自行创建这个类的实例对象 private J_Singleton( ) / J_Singleton构造方法结束 / 返回单体实例对象的引用 public static J_Singleton mb_getObject( ) return m_object; / 方法mb_getObject结束
15、 / 类J_Singleton结束,2019/6/2,30,编译、运行 & 结果,2019/6/2,31,单体类Runtime,public class Runtime private static Runtime currentRuntime = new Runtime( ); public static Runtime getRuntime( ) return currentRuntime; /* Dont let anyone else instantiate this class */ private Runtime( ) / . . ,2019/6/2,32,类java.lang.Runtime的成员方法,public static Runtime getRuntime( ) public int availableProcessors( ) public Process exec(String command) throws IOException public void gc( ) public long freeMemory( ) public long totalMemory( ) public long maxMemory( ),2019/6/2,33,作业,习题6.10,2019/6/2,34,谢谢,
链接地址:https://www.31doc.com/p-2892946.html