单例模式和静态变量 单例,java,静态变量 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 区别就是 第二种 可以改变 ,StaticPattern .configs =new HashMap<String, String>(); 在工程的任何一个地方 ,都可以改变configs 使他指向另一个内存地址。第一种 SinglePattern 是不能被改变的 ,但是你在单例的类中定义了 全局的变量存在线程安全问题 ,内部的configs 也是可以改变的。若果你的变量configs 用final 修饰 就不会被改变了 , 效果就一样了。java中的静态变量只会被加载一次。 SinglePattern :内存中 存在一个 SinglePattern 这样类型的实例,(实例的存在也是因为用到所以new一个对象出来,用不到的话,这个 实例就不用new ,内存占用“可控”)StaticPattern : 没有实例(也可以有,new出来一个),直接用类名点方法调用理论上 类 SinglePattern 是有可能被 GC的,就是说这块内存是有可能被回收的但是 StaticPattern 占用的内存 则会被一直占用。个人理解 两个都加 final 呢? 两个都加 final 呢?我说的就是两个都加 ,效果就一样了 。若果不加final 都是可以变的。 StaticPattern .configs 是private的成员变量,没有定义setter方法,不能使他指向另一个内存地址吧 虽然你没有定义 set和get 你这个是静态的 ,直接用点就能引用了。私有的 本类对象是能访问的 。StaticPattern .configs 单例是为了提供全局唯一的访问点&&同步问题,你第二种写法会出现同步问题。 http://www.360doc.com/content/13/1028/16/11253639_324825197.shtml楼主可以看看 1、首先纠正个楼上的错误,楼主你的第二种写法并没有把Map暴露出去,所以外部无法将configs指向别的对象,final不需要加。2、回答楼主的问题,主要说为什么建议使用单例而不是类的静态方法,楼主注意下你第二种方式的configs是static的,且初始化也是在static方法块中的,如果初始化过程步骤很复杂,如果再用到很多的成员变量参与初始化都需要设计成static的,且静态初始化的控制权是在Java手上的,这么做可能导致混乱。其实如果只是简单的映射配置文件,的确方法1、方法2都可行。 JList中如何实现鼠标拖动,交换2个元素的值 Spring MVC的demo null !=str 和 str !=null 两者有什么区别? Java 做ssh出现的异常,。。。。。。。。 struts2整合spring出现的错误。。。救命 AJAX下开发一个算法(质数) struts的参数传递问题 请问谁运行过《Java XML 编程指南》中的代码? 关于form表单提交问题 strut2 用户登录跳转到首页 如何自动从数据库中读取公告显示在首页? 关于java线程锁的问题。
我说的就是两个都加 ,效果就一样了 。若果不加final 都是可以变的。
私有的 本类对象是能访问的 。StaticPattern .configs
楼主可以看看
2、回答楼主的问题,主要说为什么建议使用单例而不是类的静态方法,楼主注意下你第二种方式的configs是static的,且初始化也是在static方法块中的,如果初始化过程步骤很复杂,如果再用到很多的成员变量参与初始化都需要设计成static的,且静态初始化的控制权是在Java手上的,这么做可能导致混乱。
其实如果只是简单的映射配置文件,的确方法1、方法2都可行。