`
hamburg
  • 浏览: 113962 次
  • 来自: 不污染一方土地
社区版块
存档分类
最新评论

什么时候使用 static 最恰当

    博客分类:
  • Java
阅读更多
从网上和书上找了好多资料,就想看看什么时候使用static最恰当,也就是在什么条件下使用static会给系统带来最大的优化;结果很出乎我的意料,竟然没有一篇文档会直接回答这个的问题,整的我是一头雾水。一气之下自总结一下(注意:之所以把它放到论坛是因为我对此无法确定,请大家多多关照讨论):
    static的优点:节省内存(class 中static 方法 变量 在类被虚拟机加载的时候就被分配了内存,以后所有调用,就从这里调,不同虚拟机除外)。(大家补充)
    static的缺点:不过他们修饰的方法、变量被没被使用,只要类加载就开辟了他们自己一片小天地。(大家修正补充);
    综上所述:如果不是经常使用的方法或变量,那么就不应该用static。(大家补充)。
分享到:
评论
14 楼 hamburg 2007-07-04  
当类被虚拟机加载的时候分配内存,当类被卸载的时候,虚拟机自动回收。
在多线程的时候 static没有错,有错是那些线程不安全的数据结构
13 楼 LargeBean 2007-07-02  
static 应该一直在内存中,不会被回收吧??
12 楼 processlife 2007-06-29  
补充好处:
在内存中只创建一份实例.
如果需要定义"唯一",那么static是不错的选择.
11 楼 weiqingfei 2007-06-29  
我倒觉得对于方法,如果能用就尽量用static。
对于成员变量,只有在需要static用的时候才去用。
10 楼 yananay 2007-06-28  
让你的代码来告诉你自己。

如果不断增加的代码和设计模式没有告诉你现在需要使用static,
那么就不用。
反之,就用。
9 楼 weiqingfei 2007-06-28  
hamburg 写道
小子我愚钝,没看出什么问题,请ddandyy 做进一步解释,我用过webwork好像没有问题(idc跑着呢,至今未发现)。


webwork的action是线程安全的。

另外,多线程只对共享数据产生影响。
8 楼 hamburg 2007-06-28  
小子我愚钝,没看出什么问题,请ddandyy 做进一步解释,我用过webwork好像没有问题(idc跑着呢,至今未发现)。
7 楼 ddandyy 2007-06-28  
public class ByGoodsOrderStatusAction extends BaseAction {
    private static Map map = new HashMap();

    public ActionForward first(ActionMapping mapping, ActionForm form, SessionWrapper session, HttpServletRequest request, Map requestMap, HttpServletResponse response) throws Exception {
         map.put("111",requestMap.get("111"));

         map.get("111");
    }



这个东西就会有问题   当然也不完全是和static有关 而是和全局变量有关  而且这个也和框架有关  比如我们用的是struts 1 就会有问题  ww是否有问题没有试过
6 楼 hamburg 2007-06-27  
明白什么叫会用就行了!
5 楼 cherami 2007-06-27  
static的本意就是类共享的成员,和你说的这些都没有啥关系。
对于一般类,类实例的所有成员需要共享的变量就用;另外就是工具方法都是static的。
4 楼 hamburg 2007-06-27  
ddandyy 写道
多线程       
  如果多线程会让static出现问题,那么web应用程序里不能用static,这显然是不对的嘛!
  虽然是多线程,但是用的是同一个虚拟机,当多线程访问该类的时候,也是要到虚拟机中检测该类是否已经存在,如果存在,不加载;否则,加载;这不会对static有任何问题。
   web本身就是多线程,在我们的项目中用过我没看到出现了任何问题,如果多线程出问题,那么有没有什么测试程序。
3 楼 ddandyy 2007-06-27  
多线程       
2 楼 hamburg 2007-06-27  
ddandyy 写道
没有必要   内存方面  从硬件上克服一下就可以了
带来的问题在实际中是很难发现的  代价太大
能不用就不用
您所说的问题,通常指什么方面的?
1 楼 ddandyy 2007-06-27  
没有必要   内存方面  从硬件上克服一下就可以了
带来的问题在实际中是很难发现的  代价太大
能不用就不用

相关推荐

Global site tag (gtag.js) - Google Analytics