实验5 组分接口和异常处理练习Word格式.docx
- 文档编号:20800772
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:27
- 大小:53.90KB
实验5 组分接口和异常处理练习Word格式.docx
《实验5 组分接口和异常处理练习Word格式.docx》由会员分享,可在线阅读,更多相关《实验5 组分接口和异常处理练习Word格式.docx(27页珍藏版)》请在冰豆网上搜索。
一个类的属性也可以是一个基本数据类型变量或一个类对象的数组,无论哪种情况,该数组都必须在定义属性时声明、在构造方法中创建,如果是对象数组的话,还需在创建数组后创建每个数组元素,例如:
classCurve{
privatePoint[]pa;
//声明对象数组
Curve(Point[]pa,intn){
this.pa=newPoint[n];
//创建对象数组
for(inti=0;
i<
n;
i++)
this.pa[i]=newPoint(pa[i]);
//创建数组元素
⑸组分实例
classPoint{//定义点类
Point(intx,inty){
this.x=x;
this.y=y;
Point(Pointp){
this.x=p.x;
this.y=p.y;
Point(){}
voidsetPoint(intx,inty){
intgetX(){returnx;
intgetY(){returny;
PointgetPoint(){returnthis;
classLine{//定义直线类
Line(){
this.p1=newPoint();
this.p2=newPoint();
voidSetLine(Pointp1,Pointp2){
this.p1=p1;
this.p2=p2;
PointgetP1(){returnp1;
PointgetP2(){returnp2;
LinegetLine(){returnthis;
classCurve{//定义曲线类
intn;
for(inti=0;
i<
n;
i++)
this.n=n;
Curve(intn){
this.pa[i]=newPoint();
voidSetCurve(Point[]pa,intn){
this.pa[i].setPoint(pa[i].getX(),pa[i].getY());
Point[]getCurve(){returnpa;
intgetN(){returnn;
publicclassUsePLC{//测试程序
publicstaticvoidmain(String[]args){
Pointp1,p2;
p1=newPoint(1,2);
System.out.print("
point1=("
+p1.getX()+"
"
+p1.getY()+"
)\n"
);
p2=newPoint(3,4);
point2=("
+p2.getX()+"
+p2.getY()+"
Linel=newLine(p1,p2);
line1=("
+l.getP1().getX()+"
+l.getP1().getY()+"
)to("
+l.getP2().getX()+"
+l.getP2().getY()+"
intn=4;
Point[]pa=newPoint[n];
pa[0]=newPoint(p1);
pa[1]=newPoint(p2);
pa[2]=newPoint(5,6);
pa[3]=newPoint(7,8);
Curvec=newCurve(pa,n);
curve="
n-1;
System.out.print("
("
+c.getCurve()[i].getX()+"
+c.getCurve()[i].getY()+"
)to"
+c.getCurve()[n-1].getX()+"
+c.getCurve()[n-1].getY()+"
2.接口
⑴接口的概念和用途
当硬件厂商要在外设与主机之间建立一种新的接口时,必须首先定义该接口的规范(如形状、引脚数、各引脚的功能、电压、信号交换方式等)并进行文字说明,例如USB接口,无论鼠标、打印机还是优盘,当且仅当其满足了所定义的接口规范时,才能够将自己连接到计算机上。
面向对象的“接口”(interface)意义也在于此。
只不过定义的是方法的接口规范,程序员需按照该规范去实现和调用相应的方法。
⑵接口的定义和实现
接口定义与类定义相似,不同点如下:
a.接口是以关键字interface代替class来声明;
b.接口中的属性默认有publicfinalstatic修饰符,即接口中的属性全都是常量;
c.接口中的方法默认有publicabstract修饰符,即全都为公有,且为抽象,即只有声明、没有实现,主要作用是用来定义其实现和调用的规范。
接口定义的语法为:
访问权限interface接口名{
属性和方法声明
既然接口中的方法默认为abstract,则它们必须被其它类的方法来实现,实现接口的类在类名之后必须有“implements接口名”:
访问权限class类名implements接口名{
属性和方法定义
并且实现接口的方法必须为public,例如:
interfacesortable{//定义接口
booleanlessThan(sortables);
classPointimplementssortable{//实现接口
publicbooleanlessThan(sortables){
returnthis.x<
((Point)s).x;
接口不可以被类继承,但可以被接口继承,从而当父接口中方法的实现和调用规范需要更新时,可直接在父接口之上继承一个子接口,保留原接口规范、定义新的接口规范即可,而不必从头定义一个接口,例如:
interfaceUSB1{
interfaceUSB2extendsUSB1{
增加的属性和方法声明
虽然Java不支持多继承(即一个类继承多个类),但支持一个类实现多个接口,例如:
interfaceSortable0{//比较两对象大小的方法接口
booleanlessThan(Sortable0s);
interfaceSortable1{//交换两对象数据的方法接口
voidswap(Sortable1s);
classPointimemplentsSortable0,Sortable1{//一个类实现两个接口
publicbooleanlessThan(Sortable0s){
publicvoidswap(Sortable1s){
inttmpX=this.x;
inttmpY=this.y;
this.x=((Point)s).x;
this.y=((Point)s).y;
((Point)s).x=tmpX;
((Point)s).y=tmpY;
⑶接口实例
//以下接口定义了2个方法的规范,它有助于实现对任意类型节点数组的排序操作
interfaceSortable{
booleanlessThan(Sortables);
voidswap(Sortables);
//整型节点类对Sortable的实现
classIntimplementsSortable{
privateinti;
Int(inti){
this.i=i;
Int(){}
voidsetInt(inti){
intgetInt(){
returni;
publicbooleanlessThan(Sortables){
returnthis.i<
((Int)s).i;
publicvoidswap(Sortables){
inttmp=this.i;
this.i=((Int)s).i;
((Int)s).i=tmp;
//双精度节点类对Sortable的实现
classDblimplementsSortable{
privatedoubled;
Dbl(doubled){
this.d=d;
Dbl(){}
voidsetDbl(doubled){
doublegetDbl(){
returnd;
returnthis.d<
((Dbl)s).d;
doubletmp=this.d;
this.d=((Dbl)s).d;
((Dbl)s).d=tmp;
//平面坐标节点类对Sortable的实现
classPointimplementsSortable{
//对整型数组元素排序
classInts{
privateInt[]a;
Ints(Int[]a,intn){
this.a=newInt[n];
i++){
this.a[i]=newInt(a[i].getInt());
}
Ints(intn){
this.a[i]=newInt();
voidSetInts(Int[]a,intn){
this.a[i].setInt(a[i].getInt());
Int[]getInts(){
returna;
intgetN(){
returnn;
voidbubbleSort(){
for(inti=n;
i>
1;
i--){
for(intj=1;
j<
i;
j++){
if(a[j-1].lessThan(a[j])){
a[j-1].swap(a[j]);
}
}
//对双精度数组元素排序
classDbls{
privateDbl[]a;
Dbls(Dbl[]a,intn){
this.a=newDbl[n];
this.a[i]=newDbl(a[i].getDbl());
Dbls(intn){
this.a[i]=newDbl();
voidSetDbls(Dbl[]a,intn){
this.a[i].setDbl(a[i].getDbl());
Dbl[]getDbls(){
//对平面坐标数组元素排序
classPoints{
privatePoint[]a;
Points(Point[]a,intn){
this.a=newPoint[n];
this.a[i]=newPoint(a[i]);
Points(intn){
this.a[i]=newPoint();
voidSetPoints(Point[]a,intn){
this.a[i].setPoint(a[i].getX(),a[i].getY());
Point[]getPoints(){returna;
publicvoidbubbleSort(){
if(a[j-1].lessThan(a[j]))
//测试程序
publicclassUseInterface{
intn=10;
Int[]I=newInt[n];
I[i]=newInt(i);
Intsis=newInts(I,n);
is.getN();
System.out.println(is.getInts()[i].getInt());
is.bubbleSort();
Dbl[]D=newDbl[n];
D[i]=newDbl(i);
Dblsds=newDbls(D,n);
ds.getN();
System.out.println(ds.getDbls()[i].getDbl());
ds.bubbleSort();
Point[]P=newPoint[n];
P[i]=newPoint(i,i);
Pointsps=newPoints(P,n);
ps.getN();
System.out.println(ps.getPoints()[i].getX()+"
"
+ps.getPoints()[i].getY());
ps.bubbleSort();
ps.SetPoints(P,n);
3.异常处理
⑴异常处理的概念
异常是指那些编程时可以预测、程序运行时可以处理的错误,例如除数为零、对负数取对数等。
C语言处理异常的办法往往是让被调函数返回一个特殊值(例如-1)、让主调函数打印错误信息并进行适当处理(退出或恢复),因此C语言的系统函数通常都是有返值函数(如printf)。
在本来就是有返值函数的情况下,则只能人为设置一些特殊值(如整数-9999、浮点数-1.e38等等)让主调函数来识别。
这种机制显然十分牵强,如下例:
#includ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验5 组分接口和异常处理练习 实验 组分 接口 异常 处理 练习