在学习单例模式关于单例数据更新遇到个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
- 在学习单例模式关于单例数据更新遇到个BUG!(错误)
- 创建单例数据库的方法
- 关于content_shell的单进程模式bug
- 关于单例模式
- 关于单例模式
- 关于单例模式
- 关于单例模式
- 关于单例模式
- 关于单例模式
- 关于单例模式
- 关于单例模式
- 关于单例模式
- 关于单例模式
- 关于单例模式
- 关于单例模式
- 关于单例模式
- 单例模式(学习)
- 单例数据库连接池的创建
- hdoj 2246 Interesting Housing Problem 【最大费用最大流 or KM算法】
- linux上安装svn服务
- linux socket网络编程详解
- DataStructure-8.2-平衡二叉树
- Install Jekyll
- 在学习单例模式关于单例数据更新遇到个BUG!(错误)
- git基础使用方法整理
- jquery一些记录(老是搞忘函数用法,规则)
- hive 的一次使用命令
- HTTP网络协议(二)
- 栈和数组
- PHP读取网页文件内容的实现代码(fopen,curl等)
- Java 8/27
- mysql各版本编译安装