java实验报告6 类变量与实例变量

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);
	}
}

猜你喜欢

转载自blog.csdn.net/buibuilili/article/details/108887938
今日推荐