Java面向对象程序设计实训试验指导书_第1页
Java面向对象程序设计实训试验指导书_第2页
Java面向对象程序设计实训试验指导书_第3页
Java面向对象程序设计实训试验指导书_第4页
Java面向对象程序设计实训试验指导书_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java面向对象程序设计试验指导书适用专业:计算机网络技术执笔人:周辉奎南昌工学院信息学院编二〇一三年十月目录试验项目一Java开发环境搭建 1试验项目二Java语言基础 8试验项目三Java语言面向对象基础 21试验项目四图形用户界面设计 39试验项目五异常处理 44试验项目一Java开发环境搭建一、试验目标和要求:(一)目标:1、熟悉安装JDK、JRE;2、熟悉环境变量配置;3、熟悉Eclipse;4、掌握命令提醒符运行第一个java程序。(二)要求:1、认真做好试验前各项准备工作,熟悉试验内容和机器操作步骤。2、遵守试验室规章制度和试验课堂教学纪律。3、认真完成试验任务,填写试验汇报。二、试验时数:2课时三、试验器材:操作系统:WindowsXP操作系统应用系统:Eclipse四、试验内容或步骤:试验1.1Java开发环境搭建1、JavaJDK安装单击JavaJDK安装包,然后弹出提醒框,点击下一步,直到选择安装目录图1所表示,将安装目录放在E:\Java\jdk1.6.0_35\,然后继续下一步。图1设定JDK安装目录JDK(Java开发工具)安装完成后,系统会自动安装JRE(Java运行时环境),更改JRE安装目录,将其和JDK放在同一目录下,图2所表示。图2设定JRE安装目录安装完成后,出现图2所表示界面。图3Java环境安装结束界面2、配置环境变量JavaJDK安装完成后,并不能立即使用,还需要配置相关环境变量。右键单击我电脑属性弹出以下对话框,选择高级环境变量。图4系统高级属性对话框 首先,在系统变量中新建一个JAVA_HOME变量,该变量值为JDK安装目录。在此为E:\Java\jdk1.6.0_35\。(和前面安装时指定目录一致)图4JAVA_HOME环境变量设置注意:变量值后不需要加任何符号。然后在系统变量中查找path变量,假如存在,则将JDK安装目录下bin文件夹添加其后,多个目录以分号隔开,图5所表示。假如不存在则新建一个,然后将bin目录放进去即可是E:\Java\jdk1.6.0_35\bin;图5在path变量中添加Javabin目录新建classpath环境变量,该变量值为JDK安装目录下lib目录,在此为:;%JAVA_HOME%\lib。图6所表示。图6classpath环境变量设定配置完成后,单击开始运行,输入cmd,图7所表示,确定,打开命令行窗口。图7打开命令行窗口命令在命令行窗口中输入java–version命令,显示安装Java版本信息,图8所表示,则表明javaJDK、JRE安装成功。图8JavaJDK、JRE安装测试结果在命令行窗口中输入javac命令,显示安装javac一系列选项参数,图9所表示,则表明java开发环境搭建成功。图9Java环境测试结果【附录】利用命令提醒符来运行Java程序:1、假设在F盘文件夹javaexe有HelloWorld.java文件。【操作步骤】开始——运行——cmd,一步步按以下输入(注意:类名和编译文件名必需大小写一致)说明:javac命令表示编译;java命令表示运行。【总结】开发Java程序之前JDK、JRE安装及环境配置一、先安装JDK、JRE,安装时必需全部在同一个目录,假设在E:\Java\jdk1.6.0_35\。安装完,用命令提醒符测试安装是否正确。开始——运行——cmd—— java–version,假如显示JDK版本,则安装正确。二、配置环境变量1、右击我电脑属性,选高级环境变量。2、在系统变量中新建一个变量名为JAVA_HOME,变量值为E:\Java\jdk1.6.0_35\3、在系统变量中查找path变量,假如存在,则将JDK安装目录下bin文件夹添加其后,多个目录以分号隔开,E:\Java\jdk1.6.0_35\bin;4、新建classpath环境变量,变量值为;%JAVA_HOME%\lib环境变量配置完,用命令提醒符测试配置是否正确。开始——运行——cmd—— javac,假如显示javac一系列选项参数,则表明java开发环境搭建成功。五、注意事项:1、注意使用javac命令编译源程序。2、注意使用java命令运行程序。六、练习项目及思索题:1、怎样搭建java开发环境。试验项目二Java语言基础一、试验目标和要求:(一)目标:了解Java数据类型;掌握多种变量申明方法;了解运算符优先级;掌握Java基础数据类型、运算符和表示式、数组使用方法;了解Java程序语法结构,掌握次序结构、选择结构和循环结构语法程序设计方法;经过以上内容,掌握Java语言编程规则。(二)要求:1、编写一个申明Java不一样数据类型变量程序;2、编写一个使用运算符、表示式、变量程序;3、编写一个使用Java数组程序;4、编写表示式语句、复合语句程序;5、编写使用不一样选择结构程序;6、编写使用不一样循环结构结构程序。二、试验时数:6课时三、试验器材:操作系统:WindowsXP操作系统应用系统:Eclipse四、试验内容或步骤:试验2.1申明不一样数据类型变量编写申明不一样数据类型变量程序文件EXP2_1.java,源代码以下。publicclassEXP2_1{publicstaticvoidmain(Stringargs[]){byteb=0x55;shorts=0x55ff;inti=1000000;longl=0xffffL;charc='a';floatf=0.23F;doubled=0.7E-3;booleanB=true;StringS="这是字符串类数据类型";System.out.println("字节型变量b="+b);System.out.println("短整型变量s="+s);System.out.println("整型变量i="+i);System.out.println("长整型变量l="+l);System.out.println("字符型变量c="+c);System.out.println("浮点型变量f="+f);System.out.println("双精度变量d="+d);System.out.println("布尔型变量B="+B);System.out.println("字符串类对象S="+S);}}编译并运行该程序,结果图2.1所表示。图2.1了解变量使用范围建立EXP2_2.java文件,经过本程序了解变量使用范围,源代码以下。publicclassEXP2_2{staticinti=10;publicstaticvoidmain(Stringargs[]){{intk=10;System.out.println("i="+i);System.out.println("k="+k);}System.out.println("i="+i);System.out.println("k="+k);//编译时将犯错,已出k使用范围}}编译EXP2_2.java此时会出现错误提醒图2.2所表示。因为变量k在方法块中申明,在方法块之外它是不存在,所以编译时会犯错。图2.2修改上面程序成功运行该程序思索:EXP2_2.java程序说明了什么问题?使用关系运算符和逻辑运算符建立使用关系运算符和逻辑运算符程序文件,源代码以下。classEXP2_3{publicstaticvoidmain(Stringargs[]){inta=25,b=20,e=3,f=0;booleand=a<b;System.out.println("a=25,b=20,e=3,f=0");System.out.println("因为关系表示式a<b为假,所以其逻辑值为:"+d);if(e!=0&&a/e>5)System.out.println("因为e非0且a/e为8大于5,所以输出a/e="+a/e);if(f!=0&&a/f>5)System.out.println("a/f="+a/f);elseSystem.out.println("因为f值为0,所以输出f="+f);}}编译并运行该程序,结果图2.3所表示。图2.3使用数组建立使用数组程序,本程序建立了一个长度为51维数组,一个长度为122维数组,源代码以下。publicclassEXP2_4{publicstaticvoidmain(Stringargs[]){inta[]=newint[5];intarr1[][]=newint[3][4];a[0]=10;a[1]=10+a[0];a[2]=30;a[3]=40;a[4]=a[1]+a[2];arr1[0][0]=0;arr1[0][1]=1;arr1[0][2]=2;arr1[1][0]=3;arr1[1][1]=4;arr1[1][2]=5;arr1[2][0]=6;arr1[2][1]=7;arr1[2][2]=8;System.out.println("a["+0+"]="+a[0]);System.out.println("a["+1+"]="+a[1]);System.out.println("a["+2+"]="+a[2]);System.out.println("a["+3+"]="+a[3]);System.out.println("a["+4+"]="+a[4]);System.out.println("arr1("+0+","+0+")="+arr1[0][0]);System.out.println("arr1("+0+","+1+")="+arr1[0][1]);System.out.println("arr1("+0+","+2+")="+arr1[0][2]);System.out.println("arr1("+1+","+0+")="+arr1[1][0]);System.out.println("arr1("+1+","+1+")="+arr1[1][1]);System.out.println("arr1("+1+","+2+")="+arr1[1][2]);}}编译并运行程序,结果图2.4所表示。图2.4使用表示式语句和复合语句建立包含表示式语句程序,源代码以下。classEXP2_5{publicstaticvoidmain(String[]args){intk,i=3,j=4;k=20*8/4+i+j*i;System.out.println("表示式(20*8/4+i+j*i)="+k);}}建立包含复合语句程序,源代码以下。classEXP2_6{publicstaticvoidmain(Stringargs[]){intk,i=3,j=4;k=i+j;System.out.println("在复合块外输出k="+k);{floatf;f=j+4.5F;i++;System.out.println("在复合块内输出f="+f);System.out.println("在复合块内输出k="+k);}System.out.println("在复合块外输出i="+i);}}编译并运行上述两个源程序,结果图2.5、2.6所表示。将变量i在块内定义会怎样?改变其它变量位置看看会发生什么改变。思索:指出程序复合结构和变量使用范围。图2.5图2.6使用选择语句使用if...else语句程序功效:使用if...else语句结构多分支,判定某十二个月是否为闰年。闰年条件是符合下面二者之一:能被4整除,但不能被100整除;能被4整除,又能被100整除。编写源程序文件,代码以下。publicclassEXP2_7{publicstaticvoidmain(Stringargs[]){booleanleap;intyear=;if((year%4==0&&year%100!=0)||(year%400==0))//方法1System.out.println(year+"年是闰年");elseSystem.out.println(year+"年不是闰年");year=;//方法2if(year%4!=0)leap=false;elseif(year%100!=0)leap=true;elseif(year%400!=0)leap=false;elseleap=true;if(leap==true)System.out.println(year+"年是闰年");elseSystem.out.println(year+"年不是闰年");year=2050;//方法3if(year%4==0){if(year%100==0){if(year%400==0)leap=true;elseleap=false;}elseleap=false;}elseleap=false;if(leap==true)System.out.println(year+"年是闰年");elseSystem.out.println(year+"年不是闰年");}}编译运行程序,其结果图2.7所表示。图2.7思索:本程序中有多个选择语句,哪些含有嵌套关系?使用switch语句程序功效:在不一样温度时显示不一样解释说明。程序源代码以下。classEXP2_8{publicstaticvoidmain(Stringargs[]){intc=38;switch(c<10?1:c<25?2:c<35?3:4){case1:System.out.println(""+c+"℃有点冷。要多穿衣服。");case2:System.out.println(""+c+"℃正适宜。出去玩吧。");case3:System.out.println(""+c+"℃有点热。");default:System.out.println(""+c+"℃太热了!开空调。");}}}编译运行程序,其结果图2.8所表示。图2.8使用循环语句for循环语句练习程序功效:按5度增量打印出一个从摄氏温度到华氏温度转换表。程序源代码以下。classEXP2_9{publicstaticvoidmain(Stringargs[]){inth,c;System.out.println("摄氏温度\t华氏温度");for(c=0;c<=40;c+=5){h=c*9/5+32;System.out.println("\t"+c+"\t"+h);}}}编译并运行程序,其结果图2.9所表示。图2.9while循环语句练习程序功效:运行程序后从键盘输入数字1/2/3后,可显示抽奖得到奖品;假如输入其它数字或字符显示“没有奖品给你!”。程序源代码以下。importjava.io.*;classEXP2_10{publicstaticvoidmain(Stringargs[])throwsIOException{charch;System.out.println("按1/2/3数字键可得大奖!");System.out.println("按’Q’键可退出循环操作.");while((ch=(char)System.in.read())!=''){System.in.skip(2);//跳过回车键switch(ch){case'1':System.out.println("恭喜你得大奖,一辆汽车!");break;case'2':System.out.println("不错呀,你得到一台笔记本电脑!");break;case'3':System.out.println("没有白来,你得到一台冰箱!");break;case‘q’:System.out.println(“欢迎下次再来!”);System.exit(0);default:System.out.println("真不幸,你没有奖品!下次再来吧。");}}}}编译源程序。在命令提醒符窗口运行程序,然后分别按1、2、3、r结果图2.10所表示。图2.10do…while循环语句练习程序功效:求1+2+…+100之和,并将求和表示式和所求和显示出来。程序源代码以下。classEXP2_11{publicstaticvoidmain(Stringargs[]){intn=1,sum=0;do{sum+=n++;}while(n<=100);System.out.println("1+2+...+100="+sum);}}(3)编译并运行程序,结果图2.11所表示。图2.11多重循环练习输出九九乘法表程序,源代码以下。publicclassEXP2_12{publicstaticvoidmain(Stringargs[]){inti,j,n=9;System.out.print("*|");for(i=1;i<=n;i++)System.out.print(""+i);System.out.print("\n|");for(i=1;i<=n;i++)System.out.print("");System.out.println();for(i=1;i<=n;i++){System.out.print(""+i+"|");for(j=1;j<=i;j++)System.out.print(""+i*j);System.out.println();}}}编译并运行程序,结果图2.12所表示。五、注意事项:1、注意Java集成开发环境Eclipse使用。2、注意Java程序编码方法及书写习惯。六、练习项目及思索题:1、观察输出结果,发觉九九表行和列没有对齐,怎样才能输出一张行列对齐九九表?试验项目三Java语言面向对象基础一、试验目标和要求:(一)目标:1、经过编程和上机试验了解Java语言是怎样表现面向对象编程基础思想;2、了解类封装方法,和怎样创建类和对象;3、了解组员变量和组员方法特征;4、掌握面向对象程序设计方法;5、了解类继承性和多态性作用;6、了解接口作用。(二)要求:编写一个表现面向对象思想程序;编写一个创建对象和使用对象方法程序;编写一个显示目前日期和时间程序;编写不一样组员变量修饰方法程序;编写不一样组员方法修饰方法程序;编写表现类继承性(组员变量、组员方法、组员变量隐藏)程序;编写表现类多态性(组员方法重载、结构方法重载)程序;8、编写表现接口功效程序。二、试验时数:12课时三、试验器材:操作系统:WindowsXP操作系统应用系统:Eclipse四、试验内容或步骤:试验3.1设计类来描述真实客观世界中事物,使用类组员变量来表示事物属性和状态,使用类组员方法来提供对组员变量访问或修改程序功效:设计一个用来描述汽车类,使用类非静态组员变量来表示汽车车主姓名、目前速率和目前方向盘转向角度,使用类非静态组员方法来表示改变汽车速率和停车两个操作。程序源代码以下。publicclassEXP3_1{privateStringownerName;//车主姓名privatefloatcurSpeed;//目前车速privatefloatcurDirInDegree;//目前方向盘转向角度publicEXP3_1(StringownerName){this.ownerName=ownerName;}publicEXP3_1(StringownerName,floatspeed,floatdirInDegree){this(ownerName);this.curSpeed=speed;this.curDirInDegree=dirInDegree;}publicStringgetOwnerName(){//提供对车主姓名访问returnownerName;}publicfloatgetCurDirInDegree(){//提供对目前方向盘转向角度访问returncurDirInDegree;}publicfloatgetCurSpeed(){//提供对目前车速访问returncurSpeed;}publicvoidchangeSpeed(floatcurSpeed){//提供改变目前车速this.curSpeed=curSpeed;}publicvoidstop(){//提供停车this.curSpeed=0;}}编译源程序。创建类对象,使用对象方法(类非静态方法)来访问或修改对象变量(类非静态变量)创建类EXP3_1对象,在调用类结构函数时指定对象变量初始值,以后再使用对象方法来访问或修改对象变量值。程序代码以下。publicclassEXP3_2{publicstaticvoidmain(String[]args){EXP3_1car=newEXP3_1("成龙",200f,2System.out.println("车主姓名:"+car.getOwnerName());System.out.println("目前车速:"+car.getCurSpeed());System.out.println("目前转向角度:"+car.getCurDirInDegree());car.changeSpeed(80);System.out.println("在调用changeSpeed(80)后,车速变为:"+car.getCurSpeed());car.stop();System.out.println("在调用stop()后,车速变为:"+car.getCurSpeed());}}编译并运行,结果图3.1所表示。图3.1编写显示目前时间和日期程序程序功效:该程序经过使用一个自定义类Time,实现显示目前日期和时间功效。程序代码以下。importjava.util.Calendar;classTime{privateCalendart;privateinty,m,d,hh,mm,ss;Time(){t=Calendar.getInstance();y=t.get(t.YEAR);m=t.get(t.MONTH)+1;d=t.get(t.DATE);hh=t.get(t.HOUR_OF_DAY);mm=t.get(t.MINUTE);ss=t.get(t.SECOND);}publicStringgetDate(){returny+"年"+m+"月"+d+"日";}publicStringgetTime(){returnhh+"时"+mm+"分"+ss+"秒";}}publicclassEXP3_3{publicstaticvoidmain(String[]args){Timet=newTime();System.out.println("目前日期:"+t.getDate());System.out.println("目前时间:"+t.getTime());}}编译并运行,结果图3.2所表示。图3.2使用修饰符来限定类组员变量或组员方法属性有时需要公开部分变量和方法,有时需要严禁其它对象使用变量和方法,这时能够使用修饰符来实现这个目标。常见修饰符以下:publicprivateprotectedpackagestaticfinaltransientvolatile不一样修饰符访问控制权限如表3.1所表示。访问权限修饰符类子类包全部类和包public√√√√private√protected√√√package√√表3.1程序功效:经过两个类StaticDemo、EXP3_4说明静态变量/方法和实例变量/方法区分。程序源代码以下。classStaticDemo{staticintx;inty;publicstaticintgetX(){returnx;}publicstaticvoidsetX(intnewX){x=newX;}publicintgetY(){returny;}publicvoidsetY(intnewY){y=newY;}}publicclassEXP3_4{publicstaticvoidmain(String[]args){System.out.println("静态变量x="+StaticDemo.getX());System.out.println("实例变量y="+StaticDemo.getY());//非法,编译时将犯错StaticDemoa=newStaticDemo();StaticDemob=newStaticDemo();a.setX(1);a.setY(2);b.setX(3);b.setY(4);System.out.println("静态变量a.x="+a.getX());System.out.println("实例变量a.y="+a.getY());System.out.println("静态变量b.x="+b.getX());System.out.println("实例变量b.y="+b.getY());}}对上面源程序进行编译,会出现图3.3所表示犯错提醒。图3.3将源程序中犯错语句删除或使用解释符//隐藏起来,比如,//System.out.println("实例变量y="+StaticDemo.getY());重新编译并运行该程序,结果图3.4所表示。图3.4调用方法时参数传输练习在其它语言中,函数调用或过程调用时参数有传值调用和传地址调用之分。在Java中,方法中参数传输能够分为传值调用或对象方法调用等方法。传值调用即传输参数是基础数据类型,调用方法时在方法中将不能改变参数值,这意味着只能使用它们。对象调用是指先调用对象,再调用对象方法,这种方法能够修改许可存取组员变量。所以,假如不想改变参数值,能够采取传值调用方法。假如想改变参数值,可采取对象调用方法,间接修改参数值。5.1、编写一个传值调用程序(1)程序功效:程序首先给整型变量x和y赋一个初值10,然后使用传值调用方法调用方法ff1对x和y做乘方及输出x和y乘方值,最终再输出x和y乘方值。(2)程序源代码以下。classEXP3_5{publicstaticvoidmain(String[]args){intx=10,y=10;ff1(x,y);System.out.println("x="+x+",y="+y);}staticvoidff1(intpassX,intpassY){passX=passX*passX;passY=passY*passY;System.out.println("passX="+passX+",passY="+passY);}}(3)编译并运行,结果图3.5。图3.55.2、编写一个调用对象方法程序(1)程序功效:经过调用对象方法在方法调用后修改了组员变量值。(2)程序源代码以下。classEXP3_6{publicstaticvoidmain(String[]args){Powerp=newPower();p.ff2(10,10);System.out.println("方法调用后x="+p.x+",y="+p.y);}}classPower{intx=10,y=10;voidff2(intpassX,intpassY){System.out.println("初始时x="+x+",y="+y);x=passX*passX;y=passY*passY;System.out.println("方法调用中x="+x+",y="+y);}}(3)编译并运行,结果图3.6。图3.6类继承性练习新类可从现有类中产生,并保留现有类组员变量和方法并可依据需要对它们加以修改。新类还可添加新变量和方法。这种现象就称为类继承。当建立一个新类时,无须写出全部组员变量和组员方法。只要简单地申明这个类是从一个已定义类继承下来,就能够引用被继承类全部组员。被继承类称为父类或超类(superclass),这个新类称为子类。Java提供了一个庞大类库让开发人员继承和使用。设计这些类是出于公用目标,所以,极少有某个类恰恰满足你需要。你必需设计自己能处理实际问题类,假如你设计这个类仅仅实现了继承,则和父类毫无两样。所以,通常要对子类进行扩展,即添加新属性和方法。这使得子类要比父类大,但更具特殊性,代表着一组更具体对象。继承意义就在于此。创建将被继承类(1)程序源代码以下。publicclassEXP3_7{protectedStringxm;//含有保护修饰符组员变量protectedintxh;voidsetdata(Stringm,inth)//设置数据方法{xm=m;xh=h;}publicvoidprint()//输出数据方法{System.out.println(xm+","+xh);}}(2)编译源程序。创建将被继承类(1)程序功效:经过EXP3_7类产生子类EXP3_8,其不仅含有父类组员变量xm(姓名)、xh(学号),还定义了新组员变量xy(学院)、xi(系)。在程序中调用了父类print方法,同时能够看出子类也含有该方法。(2)程序源代码以下。classEXP3_8extendsEXP3_7{protectedStringxy;protectedStringxi;publicstaticvoidmain(Stringargs[]){EXP3_7p1=newEXP3_7();p1.setdata("李四",12321);p1.print();EXP3_8s1=newEXP3_8();s1.setdata("张三",12345);//调用父类组员方法s1.xy="成全部信息工程学院";//访问本类组员变量s1.xi="计算机系";//访问本类组员变量s1.print();System.out.print(s1.xm+","+s1.xy+","+s1.xi);}}编译并运行,结果图3.7所表示。图3.7了解组员方法覆盖方法经过继承子类能够继承父类中全部能够被子类访问组员方法,但假如子类方法和父类方法同名,则不能继承,此时称子类方法覆盖了父类方法,简称为方法覆盖(override)。方法覆盖为子类提供了修改父类组员方法能力。比如,子类能够修改层层继承下来Object根类toString方法,让它输出部分更有用信息。下面程序显示了在子类Circle中添加toString方法,用来返回圆半径和圆面积信息。编写覆盖Object类toString方法程序文件EXP3_9.java,源代码以下。classCircle{privateintradius;Circle(intr){setRadius(r);}publicvoidsetRadius(intr){radius=r;}publicintgetRadius(){returnradius;}publicdoublearea(){return3.14159*radius*radius;}publicStringtoString(){return"圆半径:"+getRadius()+"圆面积:"+area();}}publicclassEXP3_9{publicstaticvoidmain(Stringargs[]){Circlec=newCircle(10);System.out.println("\n"+c.toString());}}编译并运行,结果图3.8所表示。图3.8this、super和super()使用程序功效:程序功效:说明this、super和super()使用方法。程序首先定义Point(点)类,然后创建点子类Line(线)。最终经过LX3_10类输出线段长度。程序中经过super(a,b)调用父类Point结构方法为父类x和y赋值。在子类LinesetLine方法中,因为参数名和组员变量名相同,为给组员变量赋值,使用this引用,告诉编译器是为目前类组员变量赋值。在length和toString方法中使用父类组员变量时,使用super引用,告诉编译器使用是父类组员变量。程序源代码以下。classPoint{protectedintx,y;Point(inta,intb){setPoint(a,b);}publicvoidsetPoint(inta,intb){x=a;y=b;}}classLineextendsPoint{protectedintx,y;Line(inta,intb){super(a,b);setLine(a,b);}publicvoidsetLine(intx,inty){this.x=x+x;this.y=y+y;}publicdoublelength(){intx1=super.x,y1=super.y,x2=this.x,y2=this.y;returnMath.sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));}publicStringtoString(){return"直线端点:["+super.x+","+super.y+"]["+x+","+y+"]直线长度:"+this.length();}}publicclassEXP3_10{publicstaticvoidmain(Stringargs[]){Lineline=newLine(50,50);System.out.println("\n"+line.toString());}}编译并运行,结果图3.9。图3.9类多态性练习类继承发生在多个类之间,而类多态只发生在同一个类上。在一个类中,能够定义多个同名方法,只要确定它们参数个数和类型不一样。这种现象称为类多态。多态使程序简练,为程序员带来很大便利。在OOP中,当程序要实现多个相近功效时,就给对应方法起一个共同名字,用不一样参数代表不一样功效。这么,在使用方法时不管传输什么参数,只要能被程序识别就能够得到确定结果。类多态性表现在方法重载(overload)上,包含组员方法和结构方法重载。7.1、方法重载(1)程序功效:使用同名方法对两个、三个或用数组容纳一组数进行排序(2)程序源代码以下。classIntSort{publicStringsort(inta,intb){if(a>b)returna+""+b;elsereturnb+""+a;}publicStringsort(inta,intb,intc){intswap;if(a<b){swap=a;a=b;b=swap;}if(a<c){swap=a;a=c;c=swap;}if(b<c){swap=b;b=c;c=swap;}returna+""+b+""+c;}publicStringsort(intarr[]){Strings="";intswap;for(inti=0;i<arr.length;i++)for(intj=0;j<arr.length-1;j++)if(arr[j]>arr[j+1]){swap=arr[j];arr[j]=arr[j+1];arr[j+1]=swap;}for(inti=0;i<arr.length;i++)s=s+arr[i]+"";returns;}}publicclassEXP3_11{publicstaticvoidmain(String[]args){IntSorts=newIntSort();inta=30,b=12,c=40;intarr[]={34,8,12,67,44,98,52,23,16,16};System.out.println("两个数排序结果:"+s.sort(a,b));System.out.println("三个数排序结果:"+s.sort(a,b,c));System.out.println("数组排序结果:"+s.sort(arr));}}(3)编译并运行,结果图3.10所表示。图3.107.2、结构函数重载结构方法名称和类同名,没有返回类型。尽管结构方法看起来和通常组员方法没有差异,但它不是方法,也不是类组员。所以,结构方法不能直接调用,只能由new操作符调用。结构方法对于类是十分关键,对象初始化任务要靠结构方法来完成。重载结构方法目标是提供多个初始化对象能力,使程序员能够依据实际需要选择适宜结构方法来初始化对象。程序源代码以下。classRunDemo{privateStringuserName,password;RunDemo(){System.out.println("全部为空!");}RunDemo(Stringname){userName=name;}RunDemo(Stringname,Stringpwd){this(name);password=pwd;check();}voidcheck(){Strings=null;if(userName!=null)s="用户名:"+userName;elses="用户名不能为空!";if(password!="12345678")s=s+"口令无效!";elses=s+"口令:********";System.out.println(s);}}publicclassEXP3_12{publicstaticvoidmain(String[]args){newRunDemo();newRunDemo("张三");newRunDemo(null,"李四");newRunDemo("王五","12345678");}}编译并运行,结果图3.11所表示。图3.11使用接口技术程序功效:在程序中申明一个自定义接口NL,用来计算一个人年纪。程序源代码以下。interfaceNL{//定义接口intyear=;intage();voidoutput();}publicclassEXP3_13implementsNL{//实现接口Stringxm;//类自己组员变量(姓名)intcsrq;//类自己组员变量(出生日期)publicEXP3_13(Stringn1,inty){//类结构方法xm=n1;csrq=y;}publicintage(){//实现接口方法returnyear-csrq;//这里直接使用了接口中常量year}publicvoidoutput(){//实现接口方法System.out.println(this.xm+"今年年纪是"+this.age()+"岁");}publicstaticvoidmain(Stringargs[])//类自己组员方法{NLa=newEXP3_13("张三",1990);a.output();}}编译并运行,结果图3.12。图3.12五、注意事项:1、注意Java集成开发环境Eclipse使用。2、注意Java程序编码方法及书写习惯。六、练习项目及思索题:1、集成开发环境Eclipse使用。试验项目四图形用户界面设计一、试验目标和要求:(一)目标:1、掌握GUI编程中关键概念:AWT,Swing,窗口、面板,容器布局,布局管理器;2、掌握GUI编程;3、掌握事件编程机制。(二)要求:1、认真做好试验前各项准备工作,熟悉试验内容和机器操作步骤。2、遵守试验室规章制度和试验课堂教学纪律。3、认真完成试验任务,填写试验汇报。二、试验时数:6课时三、试验器材:操作系统:WindowsXP操作系统应用系统:Eclipse四、试验内容或步骤:试验4.11.创建一个黄色面板,经过add()方法在面板中添加了一个按钮,然后将该面板添加到一个JFrame实例中,JFrame实例背景被设置为蓝绿色importjava.awt.*;importjavax.swing.*;publicclassFrameWithPanel{ publicstaticvoidmain(Stringargs[]){ JFrameframe=newJFrame("FramewithPanel"); ContainercontentPane=frame.getContentPane(); contentPane.setBackground(Color.CYAN); JPanelpanel=newJPanel(); panel.setBackground(Color.yellow); JButtonbutton=newJButton("Pressme"); panel.add(button); contentPane.add(panel,BorderLayout.SOUTH); frame.setSize(300,200); frame.setVisible(true); }}2.ActionEvent事件监听程序定义在组件类中.在Frame中添加一个自定义命令按钮类(mybutton)对象,让它为注册事件监听程序。importjava.awt.*;importjavax.swing.*;importjava.awt.event.*;publicclassActionEventDemo2{ publicstaticvoidmain(Stringargs[]){ JFrameframe=newJFrame("ActionEventDemo2"); //创建自定义组件MyButton实例 MyButtonb=newMyButton("Close"); frame.getContentPane().add(b,BorderLayout.CENTER); frame.pack(); frame.setVisible(true); }}//下面是MyButton类定义:classMyButtonextendsJButtonimplementsActionListener{ publicMyButton(Stringtext){ super(text); //注册事件监听程序 addActionListener(this); } //出现ActionEvent事件时,将结束程序运行 publicvoidactionPerformed(ActionEvente){ System.exit(0); }}3.使用CardLayout布局管理器管理组件,实现翻扑克牌效果。importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassCardLayoutDemoextendsMouseAdapter{ JPanelp1,p2,p3,p4,p5; JLabell1,l2,l3,l4,l5; //申明一个CardLayout对象 CardLayoutmyCard; JFrameframe; ContainercontentPane; publicstaticvoidmain(Stringargs[]){ CardLayoutDemothat=newCardLayoutDemo(); that.go(); } publicvoidgo(){ frame=newJFrame("CardTest"); contentPane=frame.getContentPane(); myCard=newCardLayout(); //设置CardLayout 布局管理器 contentPane.setLayout(myCard); p1=newJPanel(); p2=newJPanel(); p3=newJPanel(); p4=newJPanel(); p5=newJPanel(); //为每个JPanel创建一个标签并设定不一样 //背景颜色,方便于区分 l1=newJLabel("ThisisthefirstJPanel"); p1.add(l1); p1.setBackground(Color.yellow); l2=newJLabel("ThisisthesecondJPanel"); p2.add(l2); p2.setBackground(Color.green); l3=newJLabel("ThisisthethirdJPanel"); p3.add(l3); p3.setBackground(Color.magenta); l4=newJLabel("ThisisthefourthJPanel"); p4.add(l4); p4.setBackground(Color.white); l5=newJLabel("ThisisthefifthJPanel"); p5.add(l5); p5.setBackground(Color.cyan); //设定鼠标事件监听程序 p1.addMouseListener(this); p2.addMouseListener(this); p3.addMouseListener(this); p4.addMouseListener(this); p5.addMouseListener(this); //将每个JPanel作为一张卡片加入frame内容窗格 contentPane.add(p1,"First"); contentPane.add(p2,"Second"); contentPane.add(p3,"Third"); contentPane.add(p4,"Fourth"); contentPane.add(p5,"Fifth"); //显示第一张卡片 myCard.show(contentPane,"First"); frame.setSize(300,200); frame.setVisible(true); } //处理鼠标事件,每当敲击鼠标键时,即显示下一张卡片。 //假如已经显示到最终一张,则重新显示第一张。 publicvoidmouseClicked(MouseEvente){ myCard.next(contentPane); }}4.求给定整数平方根.编写一个综合程序,带有简单界面,实现整数平方根计算(可选)importjava.awt.event.*;importjava.awt.*;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;importjavax.swing.JTextField;classDwindowextendsJFrameimplementsActionListener{ JTextFieldinputNumber; JTextAreashow; Dwindow(Strings){ super(s); inputNumber=newJTextField(22); inputNumber.addActionListener(this); show=newJTextArea(); add(inputNumber,BorderLayout.NORTH); JScrollPanesp=newJScrollPane(); sp.setViewportView(show); add(sp,BorderLayout.CENTER); setBounds(60,60,300,300); setVisible(true); validate(); addWindowListener(newWindowAdapter(){ publicvoidwindowClosing(WindowEvente){ System.exit(0); } }); } publicvoidactionPerformed(ActionEvente){ booleanboo=false; if(e.getSource()==inputNumber){ Strings=inputNumber.getText(); chara[]=s.toCharArray(); for(inti=0;i<a.length;i++){ if(!(Character.isDigit(a[i]))) boo=true; } if(boo==true)//弹出“警告”消息对话框 { JOptionPane.showMessageDialog(this,"您输入了非法字符","警告对话框", JOptionPane.WARNING_MESSAGE); inputNumber.setText(null); }elseif(boo==false){ intnumber=Integer.parseInt(s); show.append("\n"+number+"平方根:"+Math.sqrt(number)); } } }}publicclassEx01{ publicstaticvoidmain(Stringargs[]){ newDwindow("带对话框窗口,求给定整数平方根"); }}五、注意事项:1、注意经过接口来完成事件处理时,应实现接口中全部方法。六、练习项目及思索题:1、Java事件处理机制是怎样2、若一个数据只有两种取值可能,采取哪种组件表示比较适宜?假如有二种到三种取值可能,采取哪种适宜?假如取值可能大于5个,采取哪种组件适宜?试验项目五异常处理一、试验目标和要求:(一)目标:1、了解异常类作用,2、掌握对异常捕捉和处理方法,(二)要求:了解系统异常处理机制;创建自定义异常类型;二、试验时数:4课时三、试验器材:操作系统:WindowsXP操作系统应用系统:Eclipse四、试验内容或步骤:试验5.1使用try…catch语句处理异常异常类型匹配处理方法程序功效:在程序中主动产生一个ArithmeticException类型被0除异常,并用catch语句捕捉这个异常。最终经过ArithmeticException类对象e方法getMessage给出异常具体类型并显示出来。程序源代码以下。publicclassEXP5_1{publicstaticvoidmain(String[]arg3){System.out.println("这是一个异常处理例子\n");try{inti=10;i/=0;}catch(ArithmeticExceptione){System.out.println("异常是:"+e.getMessage());}finally{System.out.println("finally语句被实施");}}}编译并运行,结果图5.1所表示。图5.1异常类型不匹配处理方法程序源代码以下。publicclassEXP5_2{publicstaticvoidmain(String[]args){System.out.println(“这是一个异常处理例子\n”);try{inti=10;i/=0;}catch(IndexOutOfBoundsExceptione){System.out.println("异常是:"+e.getMessage());}finally{System.out.println("finally语句被实施");}}}编译并运行,结果图5.2所表示。图5.2因为EXP5_2程序试图捕捉一个异常类为IndexOutOfBoundsException异常,但发生异常却是ArithmeticException类,所以,程序能够经过编译但在运行时,系统会给出异常汇报:汇报所发生但没有被捕捉异常。不过在此之前,其它语句和finally语句将会被实施。包含多个catch子句异常处理方法程序功效::在try子句中设计两个可能出现异常,当a为0时会发生异常。另外一个是肯定异常,因为数组c长度为1,定义c[42]是为法。经过两个catch子句分别来捕捉异常。程序源代码以下。publicclassEXP5_3{publicstaticvoidmain(String[]args){try{inta=args.length;System.out.println("\na="+a);intb=42/a;intc[]={1};c[42]=99;}catch(ArithmeticExceptione){System.out.println("发生了被0除:"+e);}catch(ArrayIndexOutOfBoundsExceptione){System.out.println("数组下标越界:"+e);}}}编译并运行,结果图5.3所表示。图5.3使用throw语句抛出异常在上面试验中,能够发觉,异常对象是Java运行时由系统抛出。抛出异常也能够经过使用throw语句实现。throw是Java语言

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论