Java类及对象实验报告.docx

上传人:b****5 文档编号:5234732 上传时间:2022-12-14 格式:DOCX 页数:12 大小:54.35KB
下载 相关 举报
Java类及对象实验报告.docx_第1页
第1页 / 共12页
Java类及对象实验报告.docx_第2页
第2页 / 共12页
Java类及对象实验报告.docx_第3页
第3页 / 共12页
Java类及对象实验报告.docx_第4页
第4页 / 共12页
Java类及对象实验报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Java类及对象实验报告.docx

《Java类及对象实验报告.docx》由会员分享,可在线阅读,更多相关《Java类及对象实验报告.docx(12页珍藏版)》请在冰豆网上搜索。

Java类及对象实验报告.docx

Java类及对象实验报告

 

XX邮电大学

(计算机学院)

课实验报告

实验名称:

类与对象

 

专业名称:

计算机科学与技术

班级:

计科1405班

学生:

高宏伟

学号:

04141152

指导教师:

霞林

实验日期:

2016.9.29

 

一、实验目的

通过编程和上机实验理解Java语言是如何体现面向对象编程基本思想,了解类的封装方法,以及如何创建类和对象,了解成员变量和成员方法的特性,掌握OOP方式进行程序设计的方法。

二、实验要求

1.编写一个创建对象和使用对象的方法的程序。

2.编写一个包含类成员和示例成员的程序。

3.编写一个使用Java包的程序。

三、实验容

(一)三角形、梯形和圆形的类封装

✧实验要求:

编写一个Java应用程序,该程序中有3个类:

Trangle、Leder和Circle,分别用来刻画“三角形”、“梯形”和“圆形”。

具体要求如下:

a)Trangle类具有类型为double的三个边,以及周长、面积属性,Trangle类具有返回周长、面积以及修改三个边的功能。

另外,Trangle类还具有一个boolean型的属性,该属性用来判断三个属能否构成一个三角形。

b)Lader类具有类型double的上底、下底、高、面积属性,具有返回面积的功能。

c)Circle类具有类型为double的半径、周长和面积属性,具有返回周长、面积的功能。

✧程序模板:

AreaAndLength.java

classTrangle

{

doublesideA,sideB,sideC,area,length;

booleanboo;

publicTrangle(doublea,doubleb,doublec)

{

this.sideA=a;//【代码1】参数a,b,c分别赋值给sideA,sideB,sideC

this.sideB=b;

this.sideC=c;

if((sideA+sideB)>sideC&&(sideC+sideB)>sideA&&(sideC+sideA)>sideB)

//【代码2】a,b,c构成三角形的条件表达式

{

boo=true;//【代码3】给boo赋值。

}

else

{

boo=false;【代码4】//给boo赋值。

}

}

doublegetLength()

{

returnsideA+sideB+sideC;【代码5】//方法体,要求计算出length的值并返回

}

publicdoublegetArea()

{

if(boo)

{

doublep=(sideA+sideB+sideC)/2.0;

area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));

returnarea;

}

else

{

System.out.println("不是一个三角形,不能计算面积");

return0;

}

}

publicvoidsetABC(doublea,doubleb,doublec)

{

this.sideA=a;

this.sideB=b;

this.sideC=c;//【代码6】参数a,b,c分别赋值给sideA,sideB,sideC

if((sideA+sideB)>sideC&&(sideC+sideB)>sideA&&(sideC+sideA)>sideB【代码7】)//a,b,c构成三角形的条件表达式

{

boo=true;【代码8】//给boo赋值。

}

else

{

boo=false;【代码9】//给boo赋值。

}

}

}

classLader

{

doubleabove,bottom,height,area;

Lader(doublea,doubleb,doubleh)

{

this.above=a;

this.bottom=b;

this.height=h;【代码10】//方法体,将参数a,b,c分别赋值给above,bottom,height

}

doublegetArea()

{

return(above+bottom)*height/2;【代码11】//方法体,,要求计算出area返回

}

}

classCircle

{

doubleradius,area;

Circle(doubler){this.radius=r;【代码12】//方法体}

doublegetArea(){returnMath.PI*radius*radius;

//【代码13】方法体,要求计算出area返回

}

doublegetLength(){

returnMath.PI*2*radius;//【代码14】getArea方法体的代码,要求计算出length返回}

voidsetRadius(doublenewRadius){radius=newRadius;}

doublegetRadius(){returnradius;}

}

publicclassAreaAndLength{

publicstaticvoidmain(Stringargs[]){

doublelength,area;

Circlecircle=null;

Trangletrangle;

Laderlader;

circle=newCircle(5);【代码15】//创建对象circle

trangle=newTrangle(3,4,5);【代码16】//创建对象trangle。

lader=newLader(2,3,4);【代码17】//创建对象lader

length=circle.getLength();

System.out.println("圆的周长:

"+length);

area=circle.getArea();

System.out.println("圆的面积:

"+area);

length=trangle.getLength();

System.out.println("三角形的周长:

"+length);

area=trangle.getArea();

System.out.println("三角形的面积:

"+area);

area=lader.getArea();

System.out.println("梯形的面积:

"+area);

trangle.setABC(12,34,1);

area=trangle.getArea();

System.out.println("三角形的面积:

"+area);

length=trangle.getLength();

System.out.println("三角形的周长:

"+length);}}

✧实验后的练习:

1.程序中仅仅省略【代码15】,编译能通过吗?

不能通过,提示如下

Exceptioninthread"main"java.lang.Error:

Unresolvedpilationproblems:

Thelocalvariablecirclemaynothavebeeninitialized

Thelocalvariablecirclemaynothavebeeninitialized

atAreaAndLength.Trangle$AreaAndLength.main(Trangle.java:

85)

2.程序中仅仅省略【代码16】,编译能通过吗?

不能通过,提示如下

Exceptioninthread"main"java.lang.Error:

Unresolvedpilationproblems:

Thelocalvariabletranglemaynothavebeeninitialized

Thelocalvariabletranglemaynothavebeeninitialized

Thelocalvariabletranglemaynothavebeeninitialized

Thelocalvariabletranglemaynothavebeeninitialized

Thelocalvariabletranglemaynothavebeeninitialized

atAreaAndLength.Trangle$AreaAndLength.main(Trangle.java:

89)

3.程序中仅仅省略【代码15】,运行时出现怎样的异常提示?

Exceptioninthread"main"java.lang.Error:

Unresolvedpilationproblems:

Thelocalvariablecirclemaynothavebeeninitialized

Thelocalvariablecirclemaynothavebeeninitialized

atAreaAndLength.Trangle$AreaAndLength.main(Trangle.java:

85)

1.给Trangle类增加3个方法,分别用来返回3个边:

sideA、sideB和sideC。

doublegetsideA(){returnsideA;}

doublegetsideB(){returnsideB;}

doublegetsideC(){returnsideC;}

2.让AreaAndLength类中的circle对象调用方法修改半径,然后输出修改后的半径以及修改半径后的圆的面积和周长。

circle.setRadius(3);

System.out.println("修改后的半径为"+circle.getRadius());

System.out.println("修改后的面积为"+circle.getArea());

System.out.println("修改后的周长为"+circle.getLength());

(二)实例成员与类成员。

✧实验要求:

按程序模板的要求编写源文件,要特别注意程序的输出结果,并能正确解释输出的结果。

✧程序运行效果示例:

程序运行效果如下图所示:

✧程序模板:

Example.java

classA

{

【代码1】//声明一个float型实例变量a

【代码2】//声明一个float型类变量b,

voidsetA(floata)

{

【代码3】//将参数a的值赋值给成员变量a

}

voidsetB(floatb)

{

【代码4】//将参数b的值赋值给成员变量b

}

floatgetA()

{

returna;

}

floatgetB()

{

returnb;

}

voidinputA()

{

System.out.println(a);

}

staticvoidinputB()

{

System.out.println(b);

}

}

publicclassExample

{

publicstaticvoidmain(Stringargs[])

{

A.b=100;//通过类名操作类变量b,并赋值100

A.inputB();//通过类名调用方法inputB()

Acat=newA();

Adog=newA();

cat.setA(200);//cat调用方法setA(inta)将cat的成员a的值设置为200

cat.setB(400);//cat调用方法setB(intb)将cat的成员b的值设置为400

dog.setA(150);//dog调用方法setA(inta)将dog的成员a的值设置为150

dog.setB(300);//dog调用方法setB(intb)将dog的成员b的值设置为300

cat.inputA();//cat调用inputA()。

cat.inputB();//cat调用inputB()。

dog.inputA();//dog调用inputA()。

dog.inputB();//dog调用inputB()。

}

}

✧实验后的练习:

1.将inputA()方法中的

System.out.println(a);

改写为

System.out.println(a+b);

编译是否出错?

为什么?

不会,可以在非静态方法中引用静态变量。

2.将inputB()方法中的

System.out.println(b);

改写为

System.out.println(a+b);

编译是否报错?

为什么?

会,无法在静态方法中引用非静态变量。

 

(三)使用package语句与import语句。

✧实验要求:

按实验要求使用package语句,并用import语句使用Java平台提供的包中的类以及

自定义包中的类。

掌握一些重要的操作步骤。

程序模板:

模板1:

将模板1给出的Java源文件命名为SquareEquation.java,将编译后得到的字节码文件复制到c:

\1000\tom\jiafei目录中。

SquareEquation.java

packagetom.jiafei;

publicclassSquareEquation

{

doublea,b,c;

doubleroot1,root2;

booleanboo;

publicSquareEquation(doublea,doubleb,doublec)

{

this.a=a;

this.b=b;

this.c=c;

if(a!

=0)

{

boo=true;

}

else

{

boo=false;

}

}

publicvoidgetRoots()

{

if(boo)

{

System.out.println("是一元2次方程");

doubledisk=b*b-4*a*c;

if(disk>=0)

{

root1=(-b+Math.sqrt(disk))/(2*a);

root2=(-b-Math.sqrt(disk))/(2*a);

System.out.printf("方程的根:

%f,%f\n",root1,root2);

}

else

{

System.out.printf("方程没有实根\n");

}

}

else

{

System.out.println("不是一元2次方程");

}

}

publicvoidsetCoefficient(doublea,doubleb,doublec)

{

this.a=a;

this.b=b;

this.c=c;

if(a!

=0)

{

boo=true;

}

else

{

boo=false;

}

}

}

模板2:

将模板2给出的Java源程序SunRise.java保存到d:

\2000中。

在编译模板2给出的Java源文件之前,要重新设置classpath。

假设本地机SDK的安装目录是E:

\jdk1.8。

在命令行执行如下命令:

setclasspath=C:

\ProgramFiles\java\jdk\jre\lib\rt.jar;.;c:

\1000

或用鼠标右键点击“我的电脑”,弹出快捷菜单,然后选择“属性”命令,弹出“系统属性”对话框,再单击该对话框中的“高级”选项卡,然后单击“环境变量”按钮。

将classpath的值修改为:

E:

\jdk1.5\jre\lib\rt.jar;.;c:

\1000

C:

\ProgramFiles\java\jdk\jre\lib\rt.jar;.;c:

\1000

然后重新打开一个命令行窗口,编译模板2给出的Java源程序。

SunRise.java

importtom.jiafei.*;

classSunRise

{

publicstaticvoidmain(Stringargs[])

{

SquareEquationequation=newSquareEquation(4,5,1);

equation.getRoots();

equation.setCoefficient(-3,4,5);

equation.getRoots();

}

}

【运行结果】

五.总结

本次实验是Java的第二次上机,通过编程和上机实验理解了Java语言是如何体现面向对象编程基本思想,了解了类的封装方法,以及如何创建类和对象,了解了成员变量和成员方法的特性,掌握了OOP方式进行程序设计的方法。

感受到了Java语言独有的魅力,为以后的Java语言编程奠定了基础。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 文化宗教

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1