ava程序设计试验学生版文档格式.docx
《ava程序设计试验学生版文档格式.docx》由会员分享,可在线阅读,更多相关《ava程序设计试验学生版文档格式.docx(15页珍藏版)》请在冰点文库上搜索。
【代码1】//声明double型变量speed,刻画速度
【代码2】//声明int型变量power,刻画功率
voidspeedUp(ints){
【代码3】//将参数s的值与成员变量speed的和赋值给成员变量speed
}
voidspeedDown(intd){
【代码4】//将成员变量speed与参数d的差赋值给成员变量speed
voidsetPower(intp){
【代码5】//将参数p的值赋值给成员变量power
}
intgetPower(){
【代码6】//返回成员变量power的值
doublegetSpeed(){
returnspeed;
}
----------------------------------------------------------------------------------------------
User.java
publicclassUser{
publicstaticvoidmain(Stringargs[]){
Vehiclecar1,car2;
【代码7】//使用new运算符和默认的构造方法创建对象car1
【代码8】//使用new运算符和默认的构造方法创建对象car2
car1.setPower(128);
car2.setPower(76);
System.out.println("
car1的功率是:
"
+car1.getPower());
car2的功率是:
+car2.getPower());
【代码9】//car1调用speedUp方法将自己的speed的值增加80
【代码10】//car2调用speedUp方法将自己的speed的值增加80
car1目前的速度:
+car1.getSpeed());
car2目前的速度:
+car2.getSpeed());
car1.speedDown(10);
car2.speedDown(20);
1.3实验指导
●创建一个对象时,成员变量被分配空间,这些内存空间称作该对象的实体或变量,而对象中存放着引用,以确保这些变量被该对象操作使用。
●空对象不能使用,即不能让一个空对象去调用方法产生行为。
假如程序中使用了空对象,在运行时会产生异常:
NullPointerException,对象时动态地分配实体的,Java的编译器对空对象不做检查。
因此,在编译时要避免使用空对象。
1.4实验改进(编写程序,并给出结果)
1.改进speedUp()方法,使得Vehicle类的对象加速时不能将speed值超过200.
2.改进speedDown()方法,使得Vehicle类的对象在减速时不能将speed值小于0.
3.增进一个刹车方法voidbrake(),Vehicle类的对象调用它能将speed的值变成0.
1.5实验结果
实验2家中的电视
1.实验要求
编写一个Java应用程序,模拟家庭买一台电视,即家庭将电视作为自己的一个成员,即通过调用一个方法将某个电视的引用传递给自己的电视成员。
●有三个源文件,其中TV.java中的TV类负责创建“电视”对象。
Family.java中的Family类负责创建“家庭”对象,MainClass.java是主类。
●在主类的main()方法中首先使用TV类创建一个对象haierTV,然后使用Family类再创建一个对象zhangsanFamily,并将先前TV类的实例haierTV的引用传递给zhangsanFamily对象的成员变量homeTV。
2.程序模板
TV.java
publicclassTV{
intchannel;
//电视频道
voidsetChannel(intm){
if(m>
=1){
channel=m;
intgetChannel(){
returnchannel;
voidshowProgram(){
switch(channel){
case1:
综合频道"
);
break;
case2:
经济频道"
case3:
文艺频道"
case4:
国际频道"
case5:
体育频道"
default:
不能收看"
+channel+"
频道"
Family.java
publicclassFamily{
TVhomeTV;
voidbuyTV(TVtv){
【代码1】//将参数tv赋值给homeTV
voidremoteControl(intm){
homeTV.setChannel(m);
voidseeTV(){
homeTV.showProgram();
//homeTV调用showProgram()方法
-----------------------------------------------------------------------------------------
MainClass.java
publicclassMainClass{
TVhaierTV=newTV();
【代码2】//haierTV调用setChannel(intm),并向参数m传递5
haierTV的频道是"
+haierTV.getChannel());
FamilyzhangSanFamily=newFamily();
【代码3】//zhangSanFamily调用voidbuyTV(TVtv)方法,并将haierTV传递给参数TV
zhangSanFamily开始看电视节目"
zhangSanFamily.seeTV();
intm=2;
hangSanFamily将电视更换到"
+m+"
zhangSanFamily.remoteControl(m);
hangSanFamily再看电视节目"
3.实验结果
实验3共饮同井水
编写程序模拟两个村庄共用一口水井。
编写一个Village类,该类有一个静态的int型成员变量waterAmount,用于模拟井水的水量。
在主类Land的main()方法中创建两个村庄,一个村庄改变了waterAmount的值,另一个村庄查看waterAmount的值。
Village.java
publicclassVillage{
staticintwaterAmount;
//模拟水井的水量
intpeopleNumber;
//村庄的人数
Stringname;
//村庄的名字
Village(Strings){
name=s;
staticvoidsetWaterAmount(intm){
0)
waterAmount=m;
voiddrinkWater(intn){
if(waterAmount-n>
=0){
waterAmount=waterAmount-n;
System.out.println(name+"
喝了"
+n+"
升水"
else
waterAmount=0;
staticintlookWaterAmount(){
returnwaterAmount;
}
voidsetPeopleNumber(intn){
peopleNumber=n;
intgetPeopleNumber(){
returnpeopleNumber;
-----------------------------------------------------------------------------
Land.java
publicclassLand{
【代码1】//用类名调用setWaterAmount(intm),并向参数传值200
intleftWater=【代码2】//用Village类的类名访问waterAmount
水井中有"
+leftWater+"
升水"
VillagezhaoZhuang,maJiaHeZhi;
zhaoZhuang=newVillage("
赵庄"
maJiaHeZhi=newVillage("
马家河子"
zhaoZhuang.setPeopleNumber(80);
maJiaHeZhi.setPeopleNumber(120);
【代码3】//zhaoZhuang调用drinkWater(intn),并向参数传值50
leftWater=【代码4】//maJiaHeZhi调用lookWaterAmount()方法
Stringname=maJiaHeZhi.name;
System.out.println(name+"
发现水井中有"
maJiaHeZhi.drinkWater(100);
leftWater=【代码5】//zhaoZhuang调用lookWaterAmount()方法
name=zhaoZhuang.name;
intpeopleNumber=zhaoZhuang.getPeopleNumber();
赵庄的人口:
+peopleNumber);
peopleNumber=maJiaHeZhi.getPeopleNumber();
马家河子的人口:
3.实验指导
●当java程序执行时,类的字节码文件被加载到内存,如果该类没有创建对象,类的实例变量就不会被分配内存。
但是,类的类变量,在该类被加载到内存时,就分配了相应的内存变量。
如果该类创建对象,那么不同对象的实例变量互不相同,即分配不同的内存空间,而类变量不再重新分配内存,所有对象共享类变量。
●当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,只有当该类创建对象后,类中的实例方法才分配入口地址。
当使用new运算符和构造方法创建对象时,首先分配成员变量给对象,同时实例方法必须分配入口地址,然后再执行构造方法中的语句,完成必要的初始化。
因而实例方法必须由对象调用执行。
需要注意的是,当创建第一个对象时,类中的实例方法就分配了入口地址,当再创建对象时,不再分配入口地址,也就是说,方法的入口地址被所有的对象共享。
对于类中的类方法,在该类被加载到内存时,就分配了相应的入口地址,即使该类没有创建对象,也可以直接通过类名调用类方法。
4.扩展练习
(1)【代码3】是否可以是Village.drinkWater(50);
,为什么?
(2)【代码4】是否可以是Village.lookWaterAmount();
(3)Land类main()方法中倒数第2行代码是否可以更改为:
peopleNumber=Village.getPeopleNumber();
为什么?
5.实验结果
实验4求方程的根
1.实验要求
按照实验要求使用package语句将方程属性即计算根的方法封装在一个有包名的类中,包名是tom.jiafei,类的名字是SquareEquation。
编写一个SunRise的主类,该主类使用import语句引入tom.jiafei包中的SquareEquation类。
模板1
将模板1给出的源文件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;
boo=false;
publicvoidgetRoots(){
if(boo){
是一元2次方程"
doubledisk=b*b-4*a*c;
if(disk>
root1=(-b+Math.sqrt(disk))/(2*a);
root2=(-b-Math.sqrt(disk))/(2*a);
System.out.printf("
方程的根:
%f,%f\n"
root1,root2);
else{
方程没有实根\n"
不是一元2次方程"
publicvoidsetCoefficient(doublea,doubleb,doublec){
模板2
1.设置classpath。
假设本地JDK的安装目录是:
D:
\jdk1.6。
在命令行执行如下命令:
setclasspath=D:
\jdk1.6\jre\lib\rt.jar;
.;
c:
\1000;
或右击“我的电脑”->
属性->
系统特性->
高级选项->
环境变量,将classpath的值改为classpath=D:
2.将模板2给出的Java源程序SunRise.java保存到D:
\2000中。
SunRise.java
importtom.jiafei.*;
publicclassSunRise{
SquareEquationequation=newSquareEquation(4,5,1);
equation.getRoots();
equation.setCoefficient(-3,4,5);
3实验指导
⏹如果使用import语句引入了整个包中的类,那么可能会增加编译时间。
但绝不会影响程序运行的性能。
Java运行平台由所需要的Java类库和虚拟机组成,这些类库被包含在一个jre\lib中的压缩文件中,当程序执行时,Java运行平台从类库中加载程序真正使用的类字节码到内存。
⏹可以使用import语言引入自定义包中的类,但必须在classpath中指明包的位置。
实验5实例成员和类成员
掌握实例成员和类成员的使用方法
Example.java
classA
{
【代码1】//声明一个float型实例变量a
【代码2】//声明一个float型类变量b,即static变量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[])
【代码5】//通过类名操作类变量b,并赋值100
【代码6】//通过类名调用方法inputB()
Acat=newA();
Adog=newA();
【代码7】//cat象调用方法setA(inta)将cat的成员a的值设置为200
【代码8】//cat调用方法setB(intb)将cat的成员b的值设置为400
【代码9】//dog象调用方法setA(inta)将dog的成员a的值设置为150
【代码10】//dog调用方法setB(intb)将dog的成员b的值设置为300
【代码11】//cat调用inputA()。
【代码12】//cat调用inputB()。
【代码13】//dog调用inputA()。
【代码14】//dog调用inputB()。
实验6银行账户
1.实验要求
声明银行账户类,成员变量包括账号、储户姓名、开户时间、身份证号码、存款余额等信息,成员方法包括开户、存款、取款、查询(余额、明细)、销户等操作。
publicclassAccount{
privateStringacctNumber;
privateStringcustomerName;
privateStringacctOpenTime;
privateStringcustomerIdNum;
privatedoublebalance;
publicAccount(StringaccoutnNumber){
this.acctNumber=accoutnNumber;
publicAccountopenAccount(StringaccountNumber){
returnnewAccount(accountNumber);
publicvoidsave(doublemoney){
this.balance+=money;
publicvoidquery(){
Balanceis:
"
+balance);
//....
2.实验结果
…
五、本次上机体会
创建一个Rectangle类,添加两个属性width、height。
(1)在Rectangle中添加两个方法计算矩形的周长和面积。
(2)编程利用Rectangle输出一个矩形的周长和面积。
设计一个Array类,添加一个整型数组,添加构造方法对数组赋初值。
(1)为Array类添加数组求和方法,添加返回求和值的方法。
(2)编程利用Array计算数组的和值并输出。
(实验报告如打印,纸张用A4,左装订;
页边距:
上下2.5cm,左2.9cm,右2.1cm;
字体:
宋体小四号,1.25倍行距。
)