




已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,java接口、异常与实例分析,计算机学院通信软件工程中心张艳梅ymzhang,2,本章主要内容:,1、我什么时候要用接口?2、java如何控制异常?3、Pong游戏设计分析,3,3,保险公司的例子具有车辆保险、人员保险、公司保险等多种保险业务,各种业务的保险对象不同,但在对外提供服务方面具有相似性,如都需要计算保险费(premium)等,因此可声明一个Insurable接口,并使不同的类实现这个接口在UML图中,实现接口用带有空三角形的虚线表示,1.接口的作用-例1,4,4,声明一个接口Shape2D,可利用它来实现二维的几何形状类Circle和Rectangle把计算面积的方法声明在接口里pi值是常量,把它声明在接口的数据成员里interfaceShape2D/声明Shape2D接口finaldoublepi=3.14;/数据成员一定要初始化publicabstractdoublearea();/抽象方法,1.接口的作用-例2,5,5,1.接口的作用-不相关类的公共接口,接口的作用实现多继承,同时免除C+中的多继承那样的复杂性建立类和类之间的“协议”契约关系实现不同类之间的公共操作(具体实现不同,但性质相同)实现不同类之间的常量共享,6,6,1.使用接口:共享方法名和常量,classCircleimplementsShape2Ddoubleradius;publicCircle(doubler)radius=r;publicdoublearea()return(pi*radius*radius);,classRectangleimplementsShape2Dintwidth,height;publicRectangle(intw,inth)width=w;height=h;publicdoublearea()return(width*height);,声明Circle与Rectangle两个类实现Shape2D接口,7,7,MovableObject接口定义了所有“可移动对象”能做的事情publicinterfaceMovableObjectpublicbooleanstart();publicvoidstop();publicbooleanturn(intdegrees);publicdoublefuelRemaining();publicvoidchangeSpeed(doublekmPerHour);,1.使用接口-仅仅超类?,8,8,Plane、Car、Train、Boat分别实现MovableObject接口publicclassPlaneimplementsMovableObjectpublicintseatCapacity;publicCompanyowner;publicDatelastRepairDate;/实现MovalbelObject接口的所有方法publicbooleanstart()/启动飞机,成功则返回truepublicvoidstop()/停止publicbooleanturn(intdegrees)/转向,成功则返回truepublicdoublefuelRemaining()/返回燃料剩余量publicvoidchangeSpeed(doublekmPerHour)/改变速度/plane类自己的方法:publicDategetLastRepairDate()/.publicdoublecalculateWindResistance()/.,1.使用接口-统一公共接口,9,9,为MovableObjects安装遥控器(remotecontrol)publicclassRemoteControlprivateMovableObjectmachine;RemoteControl(MovableObjectm)machine=m;/按下“启动”按钮:publicvoidstart()booleanokay=machine.start();if(!okay)display(NoResponseonstart);/.remoteControl构造方法的形参类型为MovableObject,它可以是Plane,Car,Train,Boat,等等,1.使用接口-不受限的拼装对象,PlaneaPlane=newPlane();RemoteControlcontrol=newRemoteControl(aPlane);control.start();,10,10,1.我什么时候要用接口?,可以用上java类库接口时,请尽量使用java第三方接口,合用则用自己设计接口,实现不同类之间的公共操作(具体实现不同,但性质相同)为某种特性的对象留出扩展空间(可以拼装以后开发的任意对象),11,2、面对程序的异常,谁能保证提供足够彻底的错误检验代码?,用传统语言编程时,程序员只能通过函数的返回值来发出错误信息,从而使错误数值传播遍及整个程序。,java!抛出异常,java有专门的异常处理函数,采用传统途径处理错误时,处理错误的代码直接建立在算法中,使常规执行流程不再清晰可见.,12,2、java异常处理的思想(打棒球),掷出异常象产生一个java对象一样产生一个异常对象,停止程序正常执行。捕获异常异常处理机制根据异常信息寻找异常处理函数,进行错误处理。,13,2、java的异常体系,Object,java.lang,java.io,Throwable,数组索引值小于0或大于数组长度,被0除或其他数学问题,RuntimeException,Exception,IOException,安全异常,用不恰当的参数调用,数组或字符串的索引值越界,引用没有实例化的对象,使用非法的数组格式,String索引值小于0或大于其长度,数组存储问题,异常类一般放在掷出这些异常的包中,不可控异常,可控异常,一个包含可能掷出可控异常的表达式的方法,必须处理或者声明这个异常,否则编译器就会产生语法错误。,14,2、java如何处理程序的异常?,程序设计的一个重要要素就是健壮性和安全性。java默认的异常处理JVM将捕获没有被程序自身捕获的任何不可控异常。对你自己的练习程序或者尚在调试阶段的软件来说,最好的设计也许只是使用java的默认异常处理。商业软件不能由用户来修复错误,应该包含针对可能出现的真正异常情况的异常处理程序。,15,2、java的默认异常处理,publicclassCalcAveragepublicdoubleavgFirstN(intN)intsum=0;for(intk=1;k=N;k+)sum+=k;returnsum/N;/avgFirstN()/CalcAverageclasspublicclassCalcAvgTestpublicstaticvoidmain(Stringargs)CalcAverageca=newCalcAverage();System.out.println(“AVG=”+ca.avgFirstN(0);/main(),Exceptioninthread“main”java.lang.ArithmeticException:/byzeroatCalcAverage.avgFirstN(CompiledCode)atCalcAvgTest.main(CalcAvgTest.java:5),16,2、程序员自己编的异常处理,publicclassIntFieldextendsJTextFieldpublicintgetInt()throwsNumberFormatException/文本框输入,可能掷出非数字的异常returnInteger.parseInt(gettext();/getInt/IntFieldclass窗口类中该文本框的事件响应方法publicvoidactionPerformed(ActionEvente)tryuserInt=intField.getInt();message=“Youinput”+userInt+”Thankyou.”;catch(NumbetFormatExceptionex)JOptionPane.showMessageDialog(this,”Theinputmustbeaninteger.Pleasere-enter.”);/弹出错误提示对话框finallyrepaint();/捕获数字非法的异常后提示用户重新输入,17,3.实例分析:Pong游戏,问题:自行运动的小球,用户控制的球拍,遇到墙壁或球拍会反方向弹起并发出“Pong”声。寻找对象寻找名词小球、球拍、视频界面寻找动词(行为):小球运动、球拍上下移动、球拍击中小球,窗口组件JApplet,墙壁,球拍,墙壁,墙壁,小球,18,3.Pong游戏的对象设计视图,使用,PongApplet,Paddle,Ball,19,3.Paddle类设计,什么数据什么行为对象接口应该隐藏实现细节,类名:Paddle角色:计算球拍上下的移动属性:(隐藏private)applet:PongApplet对象引用locationX,Y:球拍位置gameAreaHeight:画板高度行为:Paddle(app):建立和主界面对象关系getX():报告当前横坐标getY():报告当前纵坐标moveUp():向上移动moveDown():向下移动resetLocation():复位,20,3.Ball类设计,什么数据什么行为对象接口应该隐藏实现细节,类名:Ball角色:后台算法,计算小球运动轨迹属性:(隐藏private)applet:PongApplet对象引用locationX,Y;位置坐标directionX,Y;运动方向topWall.rightWall:墙壁位置行为:Ball(app):建立和主界面对象关系getX():报告当前横坐标getY():报告当前纵坐标move():自动运动run():线程入口,执行move(),21,3.PongApplet类设计,什么数据什么行为对象接口应该隐藏实现细节,类名:PonaApplet角色:管理游
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论