单例和静态类的区别

大板牙花生 2014-07-02 06:40:50
单例需要静态方法生成,静态类不需要实例化,这两个究竟有何区别?
静态类中如果不同的地方对静态变量进行修改,得到的结果是一样的吗?如果如此为何还需要单例模式?
...全文
840 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijingli10 2015-10-12
  • 打赏
  • 举报
回复
静态类在程序启动的时候就已经写入内存 并永久存在
而单件在需要使用的时候创建,并且可以提供销毁内存的方法,在使用之后摧毁

代码都是一直存在于内存中的,单例创建的只是原来类的copy。

我比较赞同:
静态类没办法继承,这是我们有时候必须考虑使用单例模式的一个原因
zhousitiaoda 2014-07-03
  • 打赏
  • 举报
回复
大板牙花生 2014-07-03
  • 打赏
  • 举报
回复
引用 12 楼 yangyunzhao 的回复:
[quote=引用 2 楼 hanyuwei0 的回复:] 静态类是什么,求指教
我估计他是说所有方法和所有成员都是静态的[/quote] 是啊,名称是自创的,因为从JAVA转来,不大习惯,静态类就是方法变量都是静态的,完全跟实例无关。 如果一个实例对静态变量进行了修改,是否会影响到其他的多个实例呢?
yangyunzhao 2014-07-03
  • 打赏
  • 举报
回复
引用 2 楼 hanyuwei0 的回复:
静态类是什么,求指教
我估计他是说所有方法和所有成员都是静态的
baichi4141 2014-07-03
  • 打赏
  • 举报
回复
引用 8 楼 wter26 的回复:
[quote=引用 7 楼 xmnathan 的回复:] 但是有一点我觉得有些疑问,是不是静态类是线程安全(应该是吧?),单例不是? 还有如果一个实例对静态变量进行了修改,是否会影响到其他的多个实例呢? —————— 类是否线程安全和是否静态类没啥关系吧。 要看类的内部在处理数据时,有没有做并发处理,单件类也可以做到线程安全 静态方法是安全的 ,但是如果方法中用到了静态变量就变成不安全了
静态类中,如果没有使用类的静态变量,一定是安全的,但是单例的情况下,除非加入锁,否则怎么能实现线程安全啊?? [/quote] 是否线程安全,跟静态或者单例没有关系,只看这个类有没有会被多线程修改的数据 有这种数据,不管静态类还是单例模式都要加锁,没有这种数据,都不需要加锁
  • 打赏
  • 举报
回复
引用 8 楼 wter26 的回复:
静态类中,如果没有使用类的静态变量,一定是安全的,但是单例的情况下,除非加入锁,否则怎么能实现线程安全啊??
难道线程安全的前提是不能加锁吗?肯定可以加锁啊,加锁就是线程安全的一种方法啊
lm_whales 2014-07-03
  • 打赏
  • 举报
回复
C++没有静态类,可以用名空间实现静态类 Java静态类就是一组方法的封装,可以认为就是C,C++的全局函数(外部,静态)的某种组合。 单例是一种模式,是有状态的,所以需要一个全局性质的对象,储存状态。 Java静态类,可以没有状态,也可以有状态,看实现。
大板牙花生 2014-07-03
  • 打赏
  • 举报
回复
引用 7 楼 xmnathan 的回复:
但是有一点我觉得有些疑问,是不是静态类是线程安全(应该是吧?),单例不是? 还有如果一个实例对静态变量进行了修改,是否会影响到其他的多个实例呢? —————— 类是否线程安全和是否静态类没啥关系吧。 要看类的内部在处理数据时,有没有做并发处理,单件类也可以做到线程安全 静态方法是安全的 ,但是如果方法中用到了静态变量就变成不安全了
静态类中,如果没有使用类的静态变量,一定是安全的,但是单例的情况下,除非加入锁,否则怎么能实现线程安全啊??
  • 打赏
  • 举报
回复
但是有一点我觉得有些疑问,是不是静态类是线程安全(应该是吧?),单例不是? 还有如果一个实例对静态变量进行了修改,是否会影响到其他的多个实例呢? —————— 类是否线程安全和是否静态类没啥关系吧。 要看类的内部在处理数据时,有没有做并发处理,单件类也可以做到线程安全 静态方法是安全的 ,但是如果方法中用到了静态变量就变成不安全了
大板牙花生 2014-07-03
  • 打赏
  • 举报
回复
引用 3 楼 xmnathan 的回复:
静态类在程序启动的时候就已经写入内存 并永久存在 而单件在需要使用的时候创建,并且可以提供销毁内存的方法,在使用之后摧毁 而静态类的代码最简洁,单件稍微复杂些 静态类是对全局方法、全局变量的分类组织方法。 单件有且仅有一个对象。单件类可以被继承。 有些时候确实很模糊,使用任何一种方式皆可。 静态类改成实例类,需要更改所有的调用接口。 单件类接口可以不动,将创建实例交由调用方代码处理即可。
但是有一点我觉得有些疑问,是不是静态类是线程安全(应该是吧?),单例不是? 还有如果一个实例对静态变量进行了修改,是否会影响到其他的多个实例呢?
  • 打赏
  • 举报
回复
丫挺的 都说的太好了 没我说话的余地。。。
FightForProgrammer 2014-07-02
  • 打赏
  • 举报
回复
单例可以在需要的时候创建,而静态则需要一开始就创建,这样如果程序没有用到此类,单例可以节省开销
  • 打赏
  • 举报
回复
静态类在程序启动的时候就已经写入内存 并永久存在 而单件在需要使用的时候创建,并且可以提供销毁内存的方法,在使用之后摧毁 而静态类的代码最简洁,单件稍微复杂些 静态类是对全局方法、全局变量的分类组织方法。 单件有且仅有一个对象。单件类可以被继承。 有些时候确实很模糊,使用任何一种方式皆可。 静态类改成实例类,需要更改所有的调用接口。 单件类接口可以不动,将创建实例交由调用方代码处理即可。
hanyuwei0 2014-07-02
  • 打赏
  • 举报
回复
静态类是什么,求指教
threenewbee 2014-07-02
  • 打赏
  • 举报
回复
静态类没办法继承,这是我们有时候必须考虑使用单例模式的一个原因。

33,322

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧