实验04 类的定义与实例化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四类的定义与实例化
实验目的
通过编程和上机实验理解Java语言是如何体现面向对象编程基本思想,了解类的封装方法,以及如何创建类和对象,了解成员变量和成员方法的特性,掌握面向对象程序设计的方法。
实验要求
1、编写一个体现面向对象思想的程序;
2、编写一个创建对象和使用对象的方法的程序;
3、编写一个显示当前日期和时间的程序;
4、编写不同成员变量修饰方法的程序;
5、编写不同成员方法修饰方法的程序;
实验内容
1、设计类来描述真实客观世界中的事物,使用类的成员变量来表示事物
的属性和状态,使用类的成员方法来提供对成员变量的访问或修改
(1)程序功能:设计一个用来描述汽车的类,使用类的非静态成员变量来表示汽车的
车主姓名、当前的速率和当前方向盘的转向角度,使用类的非静态成员方法来表
示改变汽车的速率和停车两个操作。
(2)程序源代码如下。
2、创建类的对象,使用对象的方法(类的非静态方法)来访问或修改对
象的变量(类的非静态变量)
(1)创建类Car的对象,在调用类的构造函数时指定对象的变量的初始值,以后再使用
对象的方法来访问或修改对象的变量的值。
(2)程序代码如下。
(3)编译并运行,结果如图3.1所示。
图 3.1
图3.2
3、编写显示当前时间和日期的程序
(3)程序功能:该程序通过使用一个自定义类Time,实现显示当前日期和时间的功
能。
(4)程序代码如下。
import java.util.Calendar;
class Time {
private Calendar t;
private int y, 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);
}
public String getDate() {
return y+" 年"+m+"月"+d+"日";
}
public String getTime() {
return hh+" 时"+mm+"分"+ss+"秒";
}
}
public class EXP3_3{
public static void main(String[] args){
Time t=new Time();
System.out.println("当前日期:"+t.getDate());
System.out.println("当前时间:"+t.getTime());
}
}
(5)编译并运行,结果如图3.2所示。
图 3.2
4、使用修饰符来限定类的成员变量或成员方法的属性
有时需要公开一些变量和方法,有时需要禁止其他对象使用变量和方法,这时可以使用修饰符来实现这个目的。
常用的修饰符如下:
public private protected package static final transient volatile 不同修饰符的访问控制权限如表3.1 所示。
访问权限修饰符类子类包所有类和包
public √√√√
private √
protected √√√
package √√
表 3.1
(1)程序功能:通过两个类StaticDemo、EXP3_4 说明静态变量/方法与实例变量/方法
的区别。
(2)程序源代码如下。
class StaticDemo {
static int x;
int y;
public static int getX() {
return x;
}
public static void setX(int newX) {
x = newX;
}
public int getY() {
return y;
}
public void setY(int newY) {
y = newY;
}
}
public class EXP3_4 {
public static void main(String[] args) {
System.out.println("静态变量x="+StaticDemo.getX());
System.out.println("实例变量y="+StaticDemo.getY()); //非法,编译时将出错
StaticDemo a= new StaticDemo();
StaticDemo b= new StaticDemo();
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)对上面的源程序进行编译,会出现如图3.3所示的出错提示。
图 3.3
(4)将源程序中的出错语句删除或使用解释符//隐藏起来,例如,
//System.out.println("实例变量y="+StaticDemo.getY());
(5)重新编译并运行该程序,结果如图3.4所示。
图 3.4
5、调用方法时参数传递的练习
在其它语言中,函数调用或过程调用时参数有传值调用和传地址调用之分。
在Java 中,方法中的参数传递可以分为传值调用或对象方法调用等方式。
传值调用即传递的参数是基本数据类型,调用方法时在方法中将不能改变参数的值,这意味着只能使用它们。
对象调用是指先调用对象,再调用对象的方法,这种方式可以修改允许存取的成员变量。
所以,如果不想改变参数的值,可以采用传值调用的方法。
如果想改变参数的值,可采用对象调用的方法,间接修改参数的值。
5.1、编写一个传值调用的程序
(1) 程序功能:程序首先给整型变量x 和y 赋一个初值10,然后使用传值调用方式调用方法ff1对x 和y 做乘方及输出x 和y 的乘方值,最后再输出x 和y 的乘方值。
(2) 程序源代码如下。
class EXP3_5 {
public static void main(String[] args) {
int x=10, y=10;
ff1(x, y);
System.out.println("x="+x+", y="+y);
}
static void ff1(int passX, int passY) {
passX=passX*passX;
passY=passY*passY;
System.out.println("passX="+passX+", passY="+passY);
}
}
(3) 编译并运行,结果如图3.5。
图 3.5
5.2、编写一个调用对象方法的程序
(1) 程序功能:通过调用对象的方法在方法调用后修改了成员变量的值。
(2) 程序源代码如下。
class EXP3_6 {
public static void main(String[] args) {
Power p=new Power();
p.ff2(10,10);
System.out.println("方法调用后 x="+p.x+", y="+p.y);
}
}
class Power{
int x=10, y=10;
void ff2(int passX, int passY) {
System.out.println("初始时 x="+x+", y="+y);
x=passX*passX;
y=passY*passY;
System.out.println("方法调用中 x="+x+", y="+y);
}
}
(3) 编译并运行,结果如图3.6。
图 3.6。