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

来源:互联网 发布:尘埃3知乎 编辑:程序博客网 时间:2024/06/02 13:37



代码是这样的:


单例类:


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 stubSingletonTest 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修饰吗?



0 0
原创粉丝点击