6.1 实验目的
类变量是与类相关联的数据变量,而实例变量是仅仅和对象相关联的数据变量。不同的对象的实例变量将被分配不同的内存空间,如果类中有类变量,那么所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其他对象的这个类变量。也就是说,对象共享类变量。类中的方法可以操作成员变量,当对象调用方法时,方法中出现的成员变量就是指分配给该对象的变量,方法中出现的类变量也是该对象的变量,只不过这个变量和所有的其他对象共享而已。实例方法可操作实例成员变量和静态成员变量,静态方法只能操作静态成员变量。本实验的目的是掌握类变量与实例变量,以及类方法与实例方法的区别。
6.2 实验要求
编写程序模拟两个村庄共同拥有一片森林。编写一个 Village 类,该类有一个静态的 int 型成员变量 treeAmount 用于模拟森林中树木的数量。在主类 MainClass 的 main 方法中创建两个村庄,一个村庄改变了 treeAmount 的值,另一个村庄查看 treeAmount 的值。
6.3 实验指导
static变量会共享同一块内存区域,也就是多个对象共享一个类的同一个静态成员变量
6.4 实验实现代码
Village.java
public class Village {
static int treeAmount;
int peopleNumber;
String name;
Village(String s){
name = s;
}
void treePlanting(int n) {
treeAmount = treeAmount + n;
System.out.println(name + "植树" + n + "棵");
}
void fellTree(int n) {
if(treeAmount - n >= 0) {
treeAmount -= n;
System.out.println(name + "伐树" + n + "棵");
}
else {
System.out.println("无树木可伐");
}
}
static int lookTreeAmount() {
return treeAmount;
}
void addPeopleNumber(int n) {
peopleNumber += n;
System.out.println(name + "增加了" + n + "人");
}
}
MainClass.java
public class MainClass {
public static void main(String []args) {
Village zhaoZhuang;
Village maJiaHeZhi;
zhaoZhuang = new Village("赵庄");
maJiaHeZhi = new Village("马家河子");
zhaoZhuang.peopleNumber = 100;
maJiaHeZhi.peopleNumber = 150;
Village.treeAmount = 200;
int leftTree = Village.treeAmount;
System.out.println("森林中有 " + leftTree + " 棵树");
//zhaoZhuang.treePlanting(50);
zhaoZhuang.treePlanting(50);
leftTree = maJiaHeZhi.lookTreeAmount();
System.out.println("森林中有 " + leftTree + " 棵树");
leftTree = Village.lookTreeAmount();
System.out.println("森林中有 "+leftTree+" 颗树");
System.out.println("赵庄的人口:"+zhaoZhuang.peopleNumber);
zhaoZhuang.addPeopleNumber(12);
System.out.println("赵庄的人口:"+zhaoZhuang.peopleNumber);
System.out.println("马家河子的人口:"+maJiaHeZhi.peopleNumber);
maJiaHeZhi.addPeopleNumber(10);
System.out.println("马家河子的人口:"+maJiaHeZhi.peopleNumber);
}
}