关于类方法中静态变量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的区别便显而易见了。
本文来自博客园,作者:种星记,转载请注明原文链接:https://www.cnblogs.com/zhongxingji/p/17697237.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)