实验五复习过程.docx
- 文档编号:503679
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:18
- 大小:103.84KB
实验五复习过程.docx
《实验五复习过程.docx》由会员分享,可在线阅读,更多相关《实验五复习过程.docx(18页珍藏版)》请在冰豆网上搜索。
实验五复习过程
实验五
计算机科学与技术系
实验报告
专业名称计算机科学与技术
课程名称JAVA语言程序设计
项目名称JAVA语言的编程环境和开发工具
班级
学号
姓名
实验日期2016/3/7
实验五接口、包、异常
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中注释掉一个方法后进行编译,看发生了什么?
为什么?
答:
错误:
调用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;
publicinterfacerectangleA{
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
矩形周长=60
2.包的定义与使用
第一步:
不使用包(使用默认包)
在工程文件project1下创建两个java文件,一个是mypack.java文件,定义两个类classA和classB,类修饰符为默认。
另一个是主类文件,在该类中使用classA和classB。
两个java文件全部使用默认包。
----------------mypack.java源代码----------------------------
classclassA
{inta;
voidaaa()
{a=100;
System.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的输出100
classB的输出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[])
{classAobjA=newclassA();
classBobjB=newclassB();
objA.aaa();
objB.bbb();
}}
运行主类,观察运行结果。
运行结果:
classA的输出100
classB的输出200
如上两个实验表明封装在同包里的类,只要成员不是私有的,相互之间透明,相当在一个java文件中一样使用。
默认访问控制符具有包访问性,即同包内可以互相访问
第三步:
按【思考问题】提示理解打包的应用过程:
【思考问题】
将主类文件Ex5_2.java封装在另一个包mypackage2,再进行编译,看编译结果提示什么错误?
(提示:
两者不在同包,classA和classB不能被识别)。
答:
Exceptioninthread"main"java.lang.Error:
无法解析的编译问题:
classA无法解析为类型
classA无法解析为类型
classB无法解析为类型
classB无法解析为类型
atmypackage2.Ex5_2.main(Ex5_2.java:
8)
原因:
不同胞内除了public之外不能使用
上条件不变,在主类classEx5_2加进importmypackage1.*语句,再编译,看是什么编译错误?
(提示:
载入了mypackag1包,可以识别这两个class,但这两个类不是public,不能被不同包使用)
答:
Exceptioninthread"main"java.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中的方法修饰符是默认的,另一个包中的代码允许访问吗?
)
答:
Exceptioninthread"main"java.lang.Error:
无法解析的编译问题:
类型classA中的方法aaa()不可视
类型classB中的方法bbb()不可视
atmypackage2.Ex5_2.main(Ex5_2.java:
10)
不允许
将方法aaa()和bbb()修饰为public,重新编译,所有错误是否消失?
无错误后可运行主类,观察运行结果。
独的j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 复习 过程