实验三 实验报告.docx
《实验三 实验报告.docx》由会员分享,可在线阅读,更多相关《实验三 实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
实验三实验报告
Java程序设计基础
实验报告
专业班级
学号
姓名
实验指导教师
实验地点
实验四室
2013-2014学年第2学期
实验序号及名称:
实验3Java语言面向对象基础
(1)
一、实验目的和要求
实验目的
通过编程和上机实验理解Java语言是如何体现面向对象编程基本思想,了解类的封装方法,以及如何创建类和对象,了解成员变量和成员方法的特性,掌握面向对象程序设计的方法,了解类的继承性和多态性的作用,了解接口的作用。
实验要求
1、编写一个体现面向对象思想的程序;
2、编写一个创建对象和使用对象的方法的程序;
3、编写一个显示当前日期和时间的程序;
4、编写不同成员变量修饰方法的程序;
5、编写不同成员方法修饰方法的程序;
6、编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序;
7、编写体现类的多态性(成员方法重载、构造方法重载)的程序;
8、编写体现接口功能的程序。
二、实验任务
9、编写一个体现面向对象思想的程序;
10、编写一个创建对象和使用对象的方法的程序;
11、编写一个显示当前日期和时间的程序;
12、编写不同成员变量修饰方法的程序;
13、编写不同成员方法修饰方法的程序;
14、编写体现类的继承性(成员变量、成员方法、成员变量隐藏)的程序;
15、编写体现类的多态性(成员方法重载、构造方法重载)的程序;
16、编写体现接口功能的程序。
三、实验内容(步骤)
1、设计类来描述真实客观世界中的事物,使用类的成员变量来表示事物的属性和状态,使用类的成员方法来提供对成员变量的访问或修改
(1)程序功能:
设计一个用来描述汽车的类,使用类的非静态成员变量来表示汽车的车主姓名、当前的速率和当前方向盘的转向角度,使用类的非静态成员方法来表示改变汽车的速率和停车两个操作。
(2)程序源代码如下。
publicclassEXP3_1{
privateStringownerName;//车主姓名
privatefloatcurSpeed;//当前车速
privatefloatcurDirInDegree;//当前方向盘转向角度
publicEXP3_1(StringownerName){
this.ownerName=ownerName;
}
publicEXP3_1(StringownerName,floatspeed,floatdirInDegree){
this(ownerName);
this.curSpeed=speed;
this.curDirInDegree=dirInDegree;
}
publicStringgetOwnerName(){//提供对车主姓名的访问
returnownerName;
}
publicfloatgetCurDirInDegree(){//提供对当前方向盘转向角度的访问
returncurDirInDegree;
}
publicfloatgetCurSpeed(){//提供对当前车速的访问
returncurSpeed;
}
publicvoidchangeSpeed(floatcurSpeed){//提供改变当前的车速
this.curSpeed=curSpeed;
}
publicvoidstop(){//提供停车
this.curSpeed=0;
}
}
(3)编译源程序。
2、创建类的对象,使用对象的方法(类的非静态方法)来访问或修改对象的变量(类的非静态变量)
(1)创建类EXP3_1的对象,在调用类的构造函数时指定对象的变量的初始值,以后再使用对象的方法来访问或修改对象的变量的值。
(2)程序代码如下。
publicclassEXP3_2{
publicstaticvoidmain(String[]args){
EXP3_1car=newEXP3_1("成龙",200f,25f);
System.out.println("车主姓名:
"+car.getOwnerName());
System.out.println("当前车速:
"+car.getCurSpeed());
System.out.println("当前转向角度:
"+car.getCurDirInDegree());
car.changeSpeed(80);
System.out.println("在调用changeSpeed(80)后,车速变为:
"+car.getCurSpeed());
car.stop();
System.out.println("在调用stop()后,车速变为:
"+car.getCurSpeed());
}
}
(3)编译并运行。
3、编写显示当前时间和日期的程序
(3)程序功能:
该程序通过使用一个自定义类Time,实现显示当前日期和时间的功能。
(4)程序代码如下。
importjava.util.Calendar;
classTime{
privateCalendart;
privateinty,m,d,hh,mm,ss;
Time(){
t=Calendar.getInstance();
y=t.get(t.YEAR);
m=t.get(t.MONTH)+1;
d=t.get(t.DATE);
hh=t.get(t.HOUR_OF_DAY);
mm=t.get(t.MINUTE);
ss=t.get(t.SECOND);
}
publicStringgetDate(){
returny+"年"+m+"月"+d+"日";
}
publicStringgetTime(){
returnhh+"时"+mm+"分"+ss+"秒";
}
}
publicclassEXP3_3{
publicstaticvoidmain(String[]args){
Timet=newTime();
System.out.println("当前日期:
"+t.getDate());
System.out.println("当前时间:
"+t.getTime());
}
}
(5)编译并运行。
4、使用修饰符来限定类的成员变量或成员方法的属性
有时需要公开一些变量和方法,有时需要禁止其他对象使用变量和方法,这时可以使用修饰符来实现这个目的。
常用的修饰符如下:
publicprivateprotectedpackagestaticfinaltransientvolatile
不同修饰符的访问控制权限如表3.1所示。
访问权限修饰符
类
子类
包
所有类和包
public
√
√
√
√
private
√
protected
√
√
√
package
√
√
表3.1
(1)程序功能:
通过两个类StaticDemo、EXP3_4说明静态变量/方法与实例变量/方法的区别。
(2)程序源代码如下。
classStaticDemo{
staticintx;
inty;
publicstaticintgetX(){
returnx;
}
publicstaticvoidsetX(intnewX){
x=newX;
}
publicintgetY(){
returny;
}
publicvoidsetY(intnewY){
y=newY;
}
}
publicclassEXP3_4{
publicstaticvoidmain(String[]args){
System.out.println("静态变量x="+StaticDemo.getX());
System.out.println("实例变量y="+StaticDemo.getY());//非法,编译时将出错
StaticDemoa=newStaticDemo();
StaticDemob=newStaticDemo();
a.setX
(1);
a.setY
(2);
b.setX(3);
b.setY(4);
System.out.println("静态变量a.x="+a.getX());
System.out.println("实例变量a.y="+a.getY());
System.out.println("静态变量b.x="+b.getX());
System.out.println("实例变量b.y="+b.getY());
}
}
(3)对上面的源程序进行编译,会出现出错提示。
(4)将源程序中的出错语句删除或使用解释符//隐藏起来,例如,//System.out.println("实例变量y="+StaticDemo.getY());
(5)重新编译并运行该程序。
5、调用方法时参数传递的练习
在其它语言中,函数调用或过程调用时参数有传值调用和传地址调用之分。
在Java中,方法中的参数传递可以分为传值调用或对象方法调用等方式。
传值调用即传递的参数是基本数据类型,调用方法时在方法中将不能改变参数的值,这意味着只能使用它们。
对象调用是指先调用对象,再调用对象的方法,这种方式可以修改允许存取的成员变量。
所以,如果不想改变参数的值,可以采用传值调用的方法。
如果想改变参数的值,可采用对象调用的方法,间接修改参数的值。
5.1、编写一个传值调用的程序
(1)程序功能:
程序首先给整型变量x和y赋一个初值10,然后使用传值调用方式调用方法ff1对x和y做乘方及输出x和y的乘方值,最后再输出x和y的乘方值。
(2)程序源代码如下。
classEXP3_5{
publicstaticvoidmain(String[]args){
intx=10,y=10;
ff1(x,y);
System.out.println("x="+x+",y="+y);
}
staticvoidff1(intpassX,intpassY){
passX=passX*passX;
passY=passY*passY;
System.out.println("passX="+passX+",passY="+passY);
}
}
(3)编译并运行。
5.2、编写一个调用对象方法的程序
(1)程序功能:
通过调用对象的方法在方法调用后修改了成员变量的值。
(2)程序源代码如下。
classEXP3_6{
publicstaticvoidmain(String[]args){
Powerp=newPower();
p.ff2(10,10);
System.out.println("方法调用后x="+p.x+",y="+p.y);
}
}
classPower{
intx=10,y=10;
voidff2(intpassX,intpassY){
System.out.println("初始时x="+x+",y="+y);
x=passX*passX;
y=passY*passY;
System.out.println("方法调用中x="+x+",y="+y);
}
}
(3)编译并运行。
四、实验过程记录(以文字、图表方式记录设计思想、设计步骤、程序框架、流程图、相关测试数据、结果等)
1.
2.
3.
4.
5.
6.
五、实验结果分析
1.
2.
六、改进及建议
学会调试程序,准确应用各个关键字。
七、总结
对一些语句还不太懂,多看一些例子,加强对语句的理解。