关于类方法中静态变量Static和实例变量的区别源码演示

一、当变量前有static时
1.源码(以摸拟售货机为例)
对象类:

public class SaleMachineMessage {
    
    
	public int money;
	public String type;
	
	//初始化5角的数量
    static int autonum=5;
		
	//初始化orange和beer的数量
	static int orangenumber=3;
	static int beernumber=3;
	
	//给投币和日期赋值
	public  SaleMachineMessage (int money,String type) {
    
    
		this.money=money;
		this.type=type;
	}
	//判断是否投入的是5角币和1元币
	public boolean isMoneyCorrect(int money) {
    
    
		if(money!=50 && money!=100){
    
    
			return false;//投币失败,请投 5 角或者1 元的硬币。
		}
		return true;
	}
	
	//判断是否投入的是orange和beer
	
	public int isJuiceCorrect(int money,String type){
    
    
		int number = 0;
		if(!type.equals("orange") && !type.equals("beer")){
    
    
			 number=1;//目前不提供该饮料。
		 }
		else if(type.equals("orange")&&orangenumber>0){
    
    
				 number=count(money,type);
				 System.out.println(orangenumber);
				 if(number==3) {
    
    
					orangenumber--;
				 }
				 System.out.println(orangenumber);
			 }
		else if(type.equals("beer")&& beernumber>0){
    
    
				 number=count(money,type);
				 System.out.println(beernumber);
				 if(number==3) {
    
    
					 beernumber--;
				 }
				 System.out.println(beernumber);
			 }
		else{
    
    
				number=5;//目前该饮料已经售完。
			}
		return number;
    }
	
	//根据按钮判断价格,并进行运算
	public int count(int money,String type) {
    
    
		int price=50;
		int index = 0;
		if(money-price==0){
    
    
			 autonum++;
			 index=2;//"您购买的 " + type + " 已出货,欢迎下次光临";
		 }
		else if(money-price>0){
    
    
			 if( autonum > 0){
    
    
				 autonum--;
				 index=3;//"请取饮料,并取回找钱。";
			 }
			 else{
    
    
				 index=4;//"对不起,目前不能找钱,请投 5 角硬币";
			 }
		 }
		return index;
	}
}

方法类:



public class SaleMachine {
    
    

	public String buy(String type, int money) {
    
    
		SaleMachineMessage s1=new SaleMachineMessage(money,type);
		
		String toString="";
		if( s1.isMoneyCorrect(money)==false) {
    
    
			toString= "投币失败,请投 5 角或者1 元的硬币。 ";
		}
		else {
    
    
        switch(s1.isJuiceCorrect(money, type)) {
    
    
        case 1:toString="目前不提供该饮料。";break;
        case 2:toString="您购买的 " + type + " 已出货,欢迎下次光临";break;
        case 3:toString="请取饮料,并取回找钱。";break;
        case 4:toString="对不起,目前不能找钱,请投 5 角硬币";break;
        case 5:toString="目前该饮料已经售完。";break;
        default:System.out.println("Error");
        }  
	  }
		return toString;
	}
}

测试类:


public class Test{
    
    
	public static void main(String[] args) {
    
    
		
		SaleMachine ss=new SaleMachine();
	    System.out.println(ss.buy("beer",90));
	    System.out.println(ss.buy("juice",100));
	    System.out.println(ss.buy("beer",50));
	    System.out.println(ss.buy("beer",100));
	    System.out.println(ss.buy("beer",100));
	    System.out.println(ss.buy("beer",100)); 
	    System.out.println(ss.buy("beer",100));
	    System.out.println(ss.buy("beer",100));
	    System.out.println(ss.buy("beer",100));
}
}

得到的结果:
在这里插入图片描述
可以看到数量随着每一次使用方法的变化而变化
而当我们把变量前的static去掉:

在这里插入代码片public class SaleMachineMessage {
    
    
	public int money;
	public String type;
	
	//初始化5角的数量
    int autonum=5;
		
	//初始化orange和beer的数量
	 int orangenumber=3;
	 int beernumber=3;
	
	//给投币和日期赋值
	public  SaleMachineMessage (int money,String type) {
    
    
		this.money=money;
		this.type=type;
	}
	//判断是否投入的是5角币和1元币
	public boolean isMoneyCorrect(int money) {
    
    
		if(money!=50 && money!=100){
    
    
			return false;//投币失败,请投 5 角或者1 元的硬币。
		}
		return true;
	}
	
	//判断是否投入的是orange和beer
	
	public int isJuiceCorrect(int money,String type){
    
    
		int number = 0;
		if(!type.equals("orange") && !type.equals("beer")){
    
    
			 number=1;//目前不提供该饮料。
		 }
		else if(type.equals("orange")&&orangenumber>0){
    
    
				 number=count(money,type);
				 System.out.println(orangenumber);
				 if(number==3) {
    
    
					orangenumber--;
				 }
				 System.out.println(orangenumber);
			 }
		else if(type.equals("beer")&& beernumber>0){
    
    
				 number=count(money,type);
				 System.out.println(beernumber);
				 if(number==3) {
    
    
					 beernumber--;
				 }
				 System.out.println(beernumber);
			 }
		else{
    
    
				number=5;//目前该饮料已经售完。
			}
		return number;
    }
	
	//根据按钮判断价格,并进行运算
	public int count(int money,String type) {
    
    
		int price=50;
		int index = 0;
		if(money-price==0){
    
    
			 autonum++;
			 index=2;//"您购买的 " + type + " 已出货,欢迎下次光临";
		 }
		else if(money-price>0){
    
    
			 if( autonum > 0){
    
    
				 autonum--;
				 index=3;//"请取饮料,并取回找钱。";
			 }
			 else{
    
    
				 index=4;//"对不起,目前不能找钱,请投 5 角硬币";
			 }
		 }
		return index;
	}
}

其他类保持不变,得到的结果是:
在这里插入图片描述
可以看到数量仅在方法内发生变化;而每一次调用方法都会将变量初始化一次
有无static的区别便显而易见了。

猜你喜欢

转载自blog.csdn.net/weixin_51659166/article/details/127311201