您好,欢迎访问三七文档
1计算机科学与技术系实验报告专业名称计算机科学与技术课程名称JAVA语言程序设计项目名称JAVA语言的编程环境和开发工具班级学号姓名实验日期2016/3/72实验五接口、包、异常1、实验性质:验证型2、实验学时:2学时一、一、实验目的1.掌握接口的定义和应用特点。2.熟悉包的定义和使用。学会如何引用自定义的类包或第三方类包。同时进一步理解类修饰符和成员修饰符对访问性的影响。3.熟悉Java捕捉异常机制。二、二、实验内容1.接口实验程序文件Ex5_1.java。运行该程序,然后按【思考问题】内容修改和观察程序。interfacerec_Area_Peri{intgetArea();//计算面积intgetPerimeter();//计算周长}//用接口的方法来实现具体的操作步骤classrectangleimplementsrec_Area_Peri{intwidth,length;rectangle(intw,intl){width=w;length=l;}publicintgetArea(){returnwidth*length;}publicintgetPerimeter(){return(2*(width+length));}}publicclassEx5_1{publicstaticvoidmain(Stringargs[]){rectanglerect=newrectangle(10,20);System.out.println(矩形面积=+rect.getArea());System.out.println(矩形周长=+rect.getPerimeter());}}运行结果:矩形面积=200矩形周长=60【思考问题】①在实现类rectangle中注释掉一个方法后进行编译,看发生了什么?为什么?3答:错误:调用rect.getPerimeter()方法发生错误,因为在interface接口中只是声明了getPerimeter()方法,并没有具体的实现。②在实现类rectangle中将各实现方法前的public修饰符去掉再进行编译,看发生了什么?为什么?答:错误:不能降低自rec_Area_Peri继承的方法的可视性,因为rec_Area_Peri本身是公有的,但在类rectangle中默认的比公有的高,所以降低自rec_Area_Peri继承的方法的可视性。③将接口rec_Area_Peri中定义的两个方法前加上abstract修饰符再编译,看对程序有影响否?为什么?答:没有影响,因为类rectangle实现接口rec_Area_Peri④不用单独的实现类rectangle,直接在主类classeEx5_1中实现那两个方法,如何修改程序?答:packageexample;publicclassEx5_1implementsrec_Area_Peri{intwidth,length;Ex5_1(intw,intl){width=w;length=l;}publicintgetArea(){returnwidth*length;}publicintgetPerimeter(){return(2*(width+length));}publicstaticvoidmain(Stringargs[]){Ex5_1e=newEx5_1(10,20);System.out.println(矩形面积=+e.getArea());System.out.println(矩形周长=+e.getPerimeter());}}运行结果:矩形面积=200矩形周长=60⑤将接口rec_Area_Peri中定义的两个方法拆分定义成两个接口,即每个接口只定义一个方法,程序将如何修改?packageexample;4publicinterfacerectangleA{intgetArea();//计算面积}packageexample;publicinterfacerectangleP{intgetPerimeter();//计算周长}packageexample;publicclassrectangle_2implementsrectangleA,rectangleP{intwidth,length;rectangle_2(intw,intl){width=w;length=l;}publicintgetArea(){returnwidth*length;}publicintgetPerimeter(){return(2*(width+length));}}packageexample;publicclassEx5_1_2{publicstaticvoidmain(Stringargs[]){rectangle_2rect=newrectangle_2(10,20);System.out.println(矩形面积=+rect.getArea());System.out.println(矩形周长=+rect.getPerimeter());}}运行结果:矩形面积=200矩形周长=602.包的定义与使用第一步:不使用包(使用默认包)在工程文件project1下创建两个java文件,一个是mypack.java文件,定义两个类classA和classB,类修饰符为默认。另一个是主类文件,在该类中使用classA和classB。两个java文件全部使用默认包。----------------mypack.java源代码----------------------------classclassA{inta;voidaaa(){a=100;5System.out.println(classA的输出+a);}}classclassB{intb;voidbbb(){b=200;System.out.println(classB的输出+b);}}----------------------Ex5_2.java源代码--------------------------publicclassEx5_2{publicstaticvoidmain(Stringargs[]){classAobjA=newclassA();classBobjB=newclassB();objA.aaa();objB.bbb();}}运行Ex5_2,观察运行结果。运行结果:classA的输出100classB的输出200第二步:采用包,两个java文件用同一个包,即编译后的三个class文件放在同一个mypackage1包中。----------------------mypack.java源代码----------------------------packagemypackage1;classclassA{inta;voidaaa(){a=100;System.out.println(classA的输出+a);}}classclassB{intb;voidbbb(){b=200;System.out.println(classB的输出+b);}}----------------------Ex5_2.java源代码--------------------------packagemypackage1;publicclassEx5_2{publicstaticvoidmain(Stringargs[])6{classAobjA=newclassA();classBobjB=newclassB();objA.aaa();objB.bbb();}}运行主类,观察运行结果。运行结果:classA的输出100classB的输出200如上两个实验表明封装在同包里的类,只要成员不是私有的,相互之间透明,相当在一个java文件中一样使用。默认访问控制符具有包访问性,即同包内可以互相访问第三步:按【思考问题】提示理解打包的应用过程:【思考问题】①将主类文件Ex5_2.java封装在另一个包mypackage2,再进行编译,看编译结果提示什么错误?(提示:两者不在同包,classA和classB不能被识别)。答:Exceptioninthreadmainjava.lang.Error:无法解析的编译问题:classA无法解析为类型classA无法解析为类型classB无法解析为类型classB无法解析为类型atmypackage2.Ex5_2.main(Ex5_2.java:8)原因:不同胞内除了public之外不能使用②上条件不变,在主类classEx5_2加进importmypackage1.*语句,再编译,看是什么编译错误?(提示:载入了mypackag1包,可以识别这两个class,但这两个类不是public,不能被不同包使用)答:Exceptioninthreadmainjava.lang.Error:无法解析的编译问题:类型classA不可视类型classA不可视类型classB不可视类型classB不可视类型classA不可视类型classB不可视atmypackage2.Ex5_2.main(Ex5_2.java:8)③将类classA和classB修饰为public再编译,看发生了什么?为什么?(提示:一个java文件中只能有一个public类且类名与文件名相同,因此每个public类用一个单独的java文件,且文件名与类名相同)答:一个java文件中只能有一个public类且类名与文件名相同,因此每个public类用一个单独的java文件,且文件名与类名相同④上面通过编译后,再看Ex5_2还存在什么错误?(提示:classA和classB中的方法修饰符是默认的,另一个包中的代码允许访问吗?)答:Exceptioninthreadmainjava.lang.Error:无法解析的编译问题:7类型classA中的方法aaa()不可视类型classB中的方法bbb()不可视atmypackage2.Ex5_2.main(Ex5_2.java:10)不允许⑤将方法aaa()和bbb()修饰为public,重新编译,所有错误是否消失?无错误后可运行主类,观察运行结果。独的java文件,且文件名与类名相同)答:Exceptioninthreadmainjava.lang.Error:无法解析的编译问题:类型classA不可视类型classA不可视类型classB不可视类型classB不可视类型classA不可视类型classB不可视atmypackage2.Ex5_2.main(Ex5_2.java:8)第四步:在不同工程下应用jar压缩包。按【思考问题】步骤理解软件重用和jar压缩包的使用。①新建一个工程project2,将原主类文件Ex5_2原样加入该工程中。(提示,importmypack1.*;不能被识别错误,当前工程没有找到包mypack1所在的classpath)②在Eclipse工具下,由Project—properties—javaBuildPath—Libraries进入如下界面:8该界面可加入第三方类包。这里已有一个默认类包就是JDK,当前工程使用任何第三方包都可通过此界面加入。这里有个选项“AddClassFolder”可加入类文件目录。首先按此选项加入,可浏览到这两个类的包目录D:\eclipse312\myfile\Test_pack\mypack1“确定”,importmypack1.*;语句错误消失,但整个文件错误仍然存在,说明直接加入包路径的方法不行。正确的选择应该是“AddExternalJARs”,但mypack1还未压缩成jar文件。③将类包压缩成jar文件。JDK提供了压缩命令,见附录1。在Eclipse下可由导出Export向导完成。“file”—“Export”进入如下界面:选择JARfile—Next进入下界面:在该界面可以浏览到被压缩的包mypack1,在JARfile文本栏中指定被压缩的jar文件名和路径。可通过“Browse”浏览到指
本文标题:实验五
链接地址:https://www.777doc.com/doc-5431009 .html