在学习单例模式关于单例数据更新遇到个BUG!(错误)

本文深入探讨了单例模式下非静态属性的更新过程,揭示了其输出结果背后的原理,并讨论了静态修饰符在属性定义中的必要性。通过实例分析,展现了属性静态化对数据更新的影响,提供了理解单例模式内部工作机理的洞察。



代码是这样的:


单例类:


public class SingletonTest {  

    private static SingletonTest instance = null;  
    private  int i= 0;

   
    public int getNum(){
    	return i;
    }
    public void setNum(int a){
    	
    	i=a;
    	System.out.println("Set i ----->"+i);
    }
    private SingletonTest() {  
    }  

    
    private static class HolderSingleton{
		private static  SingletonTest instance = new SingletonTest();//这里用不用关键字final没有什么影响,static fianl修饰的对象加强了instance只能是Singleton对
	}
	public static SingletonTest getInstance (){
		return HolderSingleton.instance;
	}
	
	

  
    public void updateNum(){
    	
    	System.out.println("i="+i);
    	SingletonTest shadow = new SingletonTest();  
        i=shadow.getNum();
    }
}

测试类:


public class TestP {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		SingletonTest ss = SingletonTest.getInstance();
		SingletonTest ww = SingletonTest.getInstance();
		
		ss.setNum(8);
	//	ss.updateNum();
		ww.updateNum();
		ww.updateNum();
		ww.setNum(2);
		ss.updateNum();
		ww.updateNum();
		ww.updateNum();
	}

}</span>

当需要更新的变量i  定义没有加static修饰符的时候,控制台输出结果是:

Set i ----->8

i=8

i=0

Set i ----->2

i=2

i=0

i=0


问题一:

觉得奇怪的地方就是,按道理  i 没有static修饰符,    打印出来的“i=?”应该全部都是“i=0”,为什么在设置了i  第一次跟新i的时候可以更新到。


给变量i加了static修饰符以后,数据可以更新到,没有问题,下边是加了static后的打印结果:

Set i ----->8

i=8

i=8

i=8

Set i ----->2

i=2

i=2

i=2


问题二:

所以还想问下,如果在单例模式的单例类中有需要更新的数据变量都必须用static修饰吗?



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值