《Java语言程序设计:ch06 异常处理、递归和单体程序设计方法》由会员分享,可在线阅读,更多相关《Java语言程序设计:ch06 异常处理、递归和单体程序设计方法(27页珍藏版)》请在金锄头文库上搜索。
1、Java语言程序设计语言程序设计第六章 异常处理、递归和单体程序设计方法2013.10本章内容本章内容异常处理什么是异常什么是异常什么时候会发生异常什么时候会发生异常异常的种类异常的种类为什么需要异常为什么需要异常异常处理的方法异常处理的方法递归单体程序设计方法Java程序设计 2013Java程序设计 2013Java 异常处理基础异常处理基础什么是异常什么是异常(Exception)?异常异常( (Exception)Exception)是正常程序流程所不能处是正常程序流程所不能处理或没有处理的异常情况或异常事件。在有理或没有处理的异常情况或异常事件。在有些书中,异常也称作例外。些书中,异
2、常也称作例外。异常种类异常种类受检异常受检异常Checked Exception)Checked Exception)必须在方法声明时通过必须在方法声明时通过throwsthrows列出列出在在编译时编译时就能被检测出,必须处理才能通过编译就能被检测出,必须处理才能通过编译非受检测异常非受检测异常( (Unchecked Exception)Unchecked Exception)不必在不必在throwsthrows列表中列表中错误错误( (Errors) Errors) 和运行时例外和运行时例外( (RuntimeExceptions)RuntimeExceptions)运行时例外只有运行时
3、例外只有在运行时在运行时才能被发现才能被发现一个完整而实用的程序必须处理一个完整而实用的程序必须处理Checked ExceptionChecked Exception和和Unchecked ExceptionUnchecked Exception。处理异常的方式:处理异常的方式:捕捉捕捉异常方式、异常方式、转移转移异常方式。异常方式。Java程序设计 2013什么时候会发生异常什么时候会发生异常?什么时候会发生异常什么时候会发生异常?数组的下标越界数组的下标越界打开不存在的文件打开不存在的文件网络无法连接网络无法连接操作数超出所要求的范围操作数超出所要求的范围少了所需加载的类少了所需加载的类
4、内存耗尽内存耗尽除数为除数为0 0(课本例子:(课本例子:P175P175)非法的参数非法的参数( (方法的参数方法的参数) )自定义例外,要求程序处理自定义例外,要求程序处理Java程序设计 20135例:数组下标越界出现异常例:数组下标越界出现异常1.public class ArrayIndexOutOfBoundsExceptionDemo2.public static void main(String args )3.int i=0;4.String greetings =Hello World!,Hello!,5.HELLO WORLD!;6.while ( i2)用递归方法来实现
5、:用递归方法来实现:public static int F(int i)if (i1) return(0); /递归结束条件递归结束条件else if (i=1)|i=2) return(1); /递归结束条件递归结束条件return(F(i-1)+F(i-2);Java程序设计 2013汉诺塔汉诺塔(Tower of Hanoi)问题问题有三根柱子:有三根柱子:S、T和和E柱子柱子S上套着上套着n个盘,小盘依次在大盘上面个盘,小盘依次在大盘上面现在要求现在要求:1.每次只能将一根柱子最上面的一个盘移动到另一根柱子上每次只能将一根柱子最上面的一个盘移动到另一根柱子上2.不允许将大盘放在小盘上面
6、不允许将大盘放在小盘上面3.只能利用这三根柱子只能利用这三根柱子4.将在柱子将在柱子S上的上的n个盘移动到柱子个盘移动到柱子E上上自己阅读课本例子自己阅读课本例子p185本章内容本章内容异常处理、递归单体程序设计方法Java程序设计 2013单体程序设计模式单体程序设计模式单例模式属于单例模式属于对象创建型模式对象创建型模式,其意图是,其意图是保证一个类保证一个类仅有一个实例仅有一个实例,并提供一个访问它的全局访问点,并提供一个访问它的全局访问点。对对一些类来说,只有一个实例是很重要的一些类来说,只有一个实例是很重要的,系统中只,系统中只应该有一个文件系统和一个窗口应该有一个文件系统和一个窗口
7、管理器管理器; ;一一个数字滤波个数字滤波器只能有一个器只能有一个A/DA/D转换器转换器; ;一一个会计系统只能专用于一个会计系统只能专用于一个公司个公司。怎样才能保证一个类只有一个实例并且这个实例易于怎样才能保证一个类只有一个实例并且这个实例易于被被访问访问? ?一一个全局变量使得一个对象可以被访问,但它不能个全局变量使得一个对象可以被访问,但它不能防止你实例化多个对象防止你实例化多个对象,一一个更好的方法是个更好的方法是让类自身负责保存他的唯一实例让类自身负责保存他的唯一实例。这个类可以保证没有其他实例可以被创建,并且它这个类可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的
8、方法,这就是可以提供一个访问该实例的方法,这就是SingletonSingleton模式。模式。单体程序设计模式单体程序设计模式要让一个类只能有一个实例对象(要让一个类只能有一个实例对象(p188189)/ 单体类实现例程。单体类实现例程。public class J_Singleton private static J_Singleton m_object = new J_Singleton( ); private J_Singleton( ) / J_Singleton构造方法结束构造方法结束 / 返回单体实例对象的引用返回单体实例对象的引用 public static J_Singlet
9、on mb_getObject( ) return m_object; / 方法方法mb_getObject结束结束 / 类类J_Singleton结束结束单例模式的要点单例模式的要点 一是某个类只能有一个实例;一是某个类只能有一个实例;二是它必须自行创建这个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提三是它必须自行向整个系统提供这个实例。供这个实例。Java程序设计 2013单体类单体类java.lang.Runtimepublic class Runtime private static Runtime currentRuntime = new Runtime( ); pu
10、blic static Runtime getRuntime( ) return currentRuntime; /* Dont let anyone else instantiate this class */ private Runtime( ) / . .Java程序设计 2013类类java.lang.Runtime的成员方法的成员方法public static Runtime getRuntime( )public int availableProcessors( )public Process exec(String command) throws IOExceptionpubli
11、c void gc( )public long freeMemory( )public long totalMemory( )public long maxMemory( )例子:例子:p192193Java程序设计 2013作业作业(1)编写一个程序,从命令行参数输入10个数作为学生成绩,需对成绩进行有效性判断,若成绩有误则通过异常处理显示错误信息,并将成绩按高到低排序打印输出。 提示:如果输入数据不为整数,要捕获Integer.parseInt()产生的异常,显示“请输入成绩”,捕获输入参数不足10个的异常(数组越界),显示“请输入至少10个成绩”。 (2)自定义类Triangle,其中有成员 x,y,z,作为三边长,构造方法Triangle(a,b,c)分别给x,y,z赋值,方法求面积getArea和显示三角形信息(三个边长)showInfo,这2个方法中当三条边不能构成一个三角形时要抛出自定义异常NoTriangleException,否则显示正确信息。在另外一个类中的主方法中构造一个Triangle对象(三边为命令行输入的三个整数),显示三角形信息和面积,要求捕获异常。