锁定老帖子 主题:为什么需要Singleton
该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-10
ywlqi 写道 qzzlw 写道 类的属性是全局的,系统一启动就已经在全局静态数据区分配好了资源,而单例是对象,只有在需要的时候才在堆内分配资源来放置实例属性。从封装的角度或者资源占用的角度来看 ,单例可能会更好一些。
同意!! 前面我已经多次解释了 这个问题 类不是在 系统一启动时 就加载, 而是第一次被引用时加载。。。 还有 难道单例对象的类就不需要加载吗? |
|
返回顶楼 | |
发表时间:2009-06-10
(接上个回复)
我觉得类也可以实现数据封装 从资源占用的角度来看,我反而觉得AnotherSingleton 更好一些,因为它不需要实例化对象 |
|
返回顶楼 | |
发表时间:2009-06-10
gthacker 写道 应该还是编程规范的原因
支持这个回复,可能就这个区别了吧 如果用对象应该更面向对象一些 |
|
返回顶楼 | |
发表时间:2009-06-10
看看那些框架的应用!
|
|
返回顶楼 | |
发表时间:2009-06-11
pojo333 写道 看看那些框架的应用!
举个例子。。! |
|
返回顶楼 | |
发表时间:2009-06-11
303535576 写道 gthacker 写道 应该还是编程规范的原因
支持这个回复,可能就这个区别了吧 如果用对象应该更面向对象一些 恩 。。。 可能这就是这个区别了吧 不过感觉 静态的 效率更高一些 |
|
返回顶楼 | |
发表时间:2009-06-11
类不能作为参数 和 返回值
|
|
返回顶楼 | |
发表时间:2009-06-11
步行者 写道 qzzlw 写道 类的属性是全局的,系统一启动就已经在全局静态数据区分配好了资源,而单例是对象,只有在需要的时候才在堆内分配资源来放置实例属性。从封装的角度或者资源占用的角度来看 ,单例可能会更好一些。
类不是在系统一启动时就加载,而是在第一次引用,或实例化时进行加载 还有另一种方法加载类 Class.forName("XXX"); 反而对象的初始化要先加载类, 再进行实例化。 所以我觉得从资源占用的角度来看 ,类反而要好一些。 至于封装,也可以通过私有静态属性来封装类状态, 我觉得这也不是问题 我说的是属性,不是类加载的问题。静态的属性肯定是放在全局数据段,而且一直占用,实例属性是在堆中需要的时候分配的。我这是从PE文件结构来理解的,java虚拟机应该也差不多。 |
|
返回顶楼 | |
发表时间:2009-06-11
qzzlw 写道 步行者 写道 qzzlw 写道 类的属性是全局的,系统一启动就已经在全局静态数据区分配好了资源,而单例是对象,只有在需要的时候才在堆内分配资源来放置实例属性。从封装的角度或者资源占用的角度来看 ,单例可能会更好一些。
类不是在系统一启动时就加载,而是在第一次引用,或实例化时进行加载 还有另一种方法加载类 Class.forName("XXX"); 反而对象的初始化要先加载类, 再进行实例化。 所以我觉得从资源占用的角度来看 ,类反而要好一些。 至于封装,也可以通过私有静态属性来封装类状态, 我觉得这也不是问题 我说的是属性,不是类加载的问题。静态的属性肯定是放在全局数据段,而且一直占用,实例属性是在堆中需要的时候分配的。我这是从PE文件结构来理解的,java虚拟机应该也差不多。 静态属性也是在需要的时候被加载进内存的啊 静态属性不是定义在类中吗 类加载后 类的属性才能被放在全局数据段中 实例属性 也只有实例被创建后才能被保存到堆中 但首先也需要加载相应的类 |
|
返回顶楼 | |
发表时间:2009-06-11
步行者 写道 qzzlw 写道 步行者 写道 qzzlw 写道 类的属性是全局的,系统一启动就已经在全局静态数据区分配好了资源,而单例是对象,只有在需要的时候才在堆内分配资源来放置实例属性。从封装的角度或者资源占用的角度来看 ,单例可能会更好一些。
类不是在系统一启动时就加载,而是在第一次引用,或实例化时进行加载 还有另一种方法加载类 Class.forName("XXX"); 反而对象的初始化要先加载类, 再进行实例化。 所以我觉得从资源占用的角度来看 ,类反而要好一些。 至于封装,也可以通过私有静态属性来封装类状态, 我觉得这也不是问题 我说的是属性,不是类加载的问题。静态的属性肯定是放在全局数据段,而且一直占用,实例属性是在堆中需要的时候分配的。我这是从PE文件结构来理解的,java虚拟机应该也差不多。 静态属性也是在需要的时候被加载进内存的啊 静态属性不是定义在类中吗 类加载后 类的属性才能被放在全局数据段中 实例属性 也只有实例被创建后才能被保存到堆中 但首先也需要加载相应的类 类是什么呢?类只不过是方法和数据的集合,方法都在代码段,这部分内存是不可能省掉的。数据如果是静态的,就在全局数据段,这部分永远会加载到内存。实例数据只有在构造类实例的时候才占有堆内存。 |
|
返回顶楼 | |