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

什么时候使用 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  
没有必要   内存方面  从硬件上克服一下就可以了
带来的问题在实际中是很难发现的  代价太大
能不用就不用

相关推荐

    static变量和static函数的用法摘抄

    在C++编程中,`static`关键字有着独特的用途,它主要用在变量和函数的声明上,以控制它们的存储方式、作用域和生命周期。以下是关于`static`变量和`...理解并恰当地使用`static`,有助于编写更高效、更安全的代码。

    关于static的说法

    如果不恰当地使用了非线程安全的方式访问静态变量,则可能会导致数据竞争(race condition)。 #### Const关键字详解 ##### 1. Const的定义及用途 `const`关键字用于声明常量或指定某个变量的部分为常量,这有助...

    Java static修饰方法

    在Java编程语言中,`static`关键字是一个非常重要的修饰符,它有多种用途,但最常见的是用来修饰类的方法和变量。在这个主题中,我们将深入探讨`static`修饰方法的概念、作用以及它如何影响Java程序的执行。 首先,...

    JavaSE024static与final使用陷阱续..pdf

    n("Q constructor";}}在Java编程中,`static`和`final`...理解并恰当使用这两个关键字是编写健壮、可维护的Java代码的关键。在实际开发中,避免`final`和`static`的误用,可以减少潜在的错误和问题,提高代码质量。

    static成员变量不属于对象的一部分,而是类的一部分,所以程序可以在还没有诞生任何对象的时候就处理此种成员变量

    在C++编程语言中,`static`关键字用于修饰类的成员变量或成员函数,具有特殊的行为和用途。这里我们将深入探讨`static`...理解并恰当使用`static`成员变量可以提高代码的效率和可维护性,同时避免不必要的资源消耗。

    static方法和非staitic方法的调用.zip_718static_arrangertr

    在Java编程语言中,`static`关键字是用来声明类级别的...理解并恰当使用它们对于编写高效、可维护的代码至关重要。选择使用哪种方法取决于方法是否需要访问对象状态、是否需要实例化对象以及多线程环境下的安全性需求。

    java 关键字static详细介绍及如何使用

    Java中的`static`关键字是Java语言的一个重要特性,它用于修饰类的成员变量、成员方法以及代码块。本文将深入探讨`static`关键字的含义、使用...理解并恰当使用`static`,可以帮助开发者编写出更高效、可维护的代码。

    Java中static作用详解

    Java中的`static`关键字是用来修饰成员变量、成员方法和代码块的,...理解并恰当使用`static`是编写高效、可维护Java代码的关键。在设计类时,需要谨慎考虑是否将成员声明为静态,因为它会影响到类的行为和实例化成本。

    QT moc definition of dllimport static data member not allow.pdf

    总的来说,当遇到“QT moc definition of dllimport static data member not allow”这样的错误时,检查代码中是否有不恰当的`dllimport`和`static`结合,并根据库的构建方式调整宏定义,以确保正确的导出和导入行为...

    static全局变量与普通的全局变量的区别详细解析

    全局变量和局部变量是编程中的基础概念,而在C/C++语言中,`static`关键字的使用为它们增添了新的特性。本文将深入探讨`static`全局变量、`...理解并恰当使用`static`是成为一名熟练的C/C++程序员的关键技能之一。

    JAVA\Java开发中static、this、super和final用法

    在实际编程中,理解并恰当地使用这些关键字是提高代码质量和可维护性的关键。`static`用于共享资源,`this`和`super`帮助管理对象和继承关系,`final`则确保数据的不可变性和防止意外的修改。熟练掌握这些关键字的...

    c# static 静态数据成员

    在C#编程语言中,静态成员...总而言之,理解并恰当使用C#中的静态数据成员和静态方法,能够帮助开发者更好地实现封装、继承和多态这些面向对象的基本原则,并在多实例共享数据和方法的场景下提高代码的效率和可维护性。

    谈Java static关键字的用法与好处

    总之,理解并恰当使用`static`关键字是Java编程的关键。它提供了便利的同时,也需要开发者谨慎处理以避免潜在的问题。在编写代码时,应根据实际需求来决定是否使用`static`,以保持代码的清晰和可维护性。

    标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast和const_cast

    其中,最常用的四种类型转换符包括:`static_cast`、`dynamic_cast`、`reinterpret_cast`和`const_cast`。这些转换符不仅增强了代码的表达能力,同时也为开发者提供了更多的灵活性。接下来,我们将详细介绍这四种...

    Java-关键字final详解(public static final)

    Java中的`final`关键字是一个非常重要的修饰符,用于在...理解并恰当使用`final`关键字有助于提高代码的可维护性、安全性和性能。在编写不可变对象、定义常量以及防止意外的代码修改时,`final`都是不可或缺的工具。

    C语言中auto,register,static,const,volatile的区别详细解析

    对于需要跨函数调用保持状态的变量,使用`static`;对于希望保护不被意外修改的变量,使用`const`;而`volatile`则适用于需要处理硬件交互或并发场景的变量。理解并恰当运用这些关键字,是编写高效、可靠的C语言程序...

    C语言中,static的作用?

    在C语言中,`static` 关键字...理解并恰当使用`static`关键字是C语言编程中的一项关键技能,它有助于编写更健壮、更易于维护的代码。在实际编程中,应根据需要谨慎地使用`static`,以平衡封装性、持久性和初始化需求。

    浅谈iOS开发中static变量的三大作用

    在iOS开发中,`static`关键字在C/C++和...在编写代码时,合理使用`static`可以帮助优化程序结构,避免命名冲突,减少初始化工作,并确保变量的生命周期得到恰当管理。了解这些用法对于提升iOS应用的代码质量非常关键。

    static和代码块小总结

    在Java编程语言中,`static`关键字和代码块扮演着重要的角色,特别是在对象的初始化和类级别的变量管理中。...在编写代码时,理解并恰当地使用这些概念,将有助于编写出更高效、可维护的Java程序。

Global site tag (gtag.js) - Google Analytics