<%@ page contentType="text/html; charset=gb2312"%> 静态设计
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
静态设计
     发布者: 发布时间:2006-12-30
     在我们系统设计中,类方法的功能设计一般是改变对象的状态,以及返回对象的信息。然而在这两种情况之外,还存在一种类型的方法,其设计目的,是专为系统提供某种特定的功能,作为系统专用的一种工具,有的书上称之为“工具方法”,一般情况下,我们会将这类方法设计成静态的,保证系统中所有的代码都可以使用它。在Java API中,最典型的例子之一是java.lang.Math类,它的所有变量、方法都是静态的,专为数学计算而设计。

  static double PI;  //类变量,代表圆周率
  static double abs(double a);  //类方法,取双精度浮点类型参数的绝对值

    经过关键字static修饰后,对象中的实例变量或实例方法就成为了类变量、类方法,使用静态的好处是,在代码中,我们可以不用创建对象而直接使用类变量和类方法,这样可以简化我们的代码,减少系统的内存开销。例如,在多处需要使用这些方法所提供的功能时,如果使用实例方法,就需要我们创建多个对象来调用这些方法,对于一个规模庞大的系统来说,这通常是不理智的,使用静态方法,可以保证该静态方法仅会存在于系统内存中的一个地址段内。从这里也可以看出,静态方法内应该尽量使用类变量代替实例变量,否则在多次调用静态方法的过程中,会创建多个实例变量,增加系统占用的内存空间。

    Java虚拟机第一次加载类的时候,会初始化静态的代码块,这和实例变量和实例方法的加载时间不一样。静态的代码可以存放在一个static代码块中,在类加载的时候一起初始化,但是在static代码块中不能抛出异常:

static {
  
double i = java.lang.Math.random();
  
long time = System.currentTimeMillis();
}

    现在来理解“静态”,简而言之,就是一旦在系统中生成,其地址就不再改变的变量或方法,因此,静态设计可以为我们提供如下方便:

    1.简化或优化代码。
    2.减少系统的内存开销。
    3.分离出系统中的工具类。

    世上少有鱼与熊掌兼得得事,如果漫无目的地使用静态,也会出现一些意外情况。

    静态变量在内存中只会存在一份拷贝,而静态设计的目的之一是要为系统提供一系列通用的工具,因此所有的代码都可以对静态变量进行访问或改变它的值,这样容易使设计者对当前变量所存储的值产生疑惑,不知道是谁动了我的“奶酪”。
                                                                                                                              
  
如果在程序上面静态导入相应的包、类,在程序中可以不使用类名,这样会给代码阅读者带来混淆。静态导入的格式:
import static com.sun.staticClassTools.CommonTool;

    静态变量(类变量)的生命周期是从类的第一次加载到应用程序的结束,使用静态变量存储集合通常会带来巨大的内存开销,因为Java垃圾回收不会回收在以静态方式存在的集合对象,直到应用程序终止,哪怕这些集合对象已经不再使用。

    静态设计违反OO设计原则,它是非面向对象的,类似于C语言中的全局函数,以过程的思想处理我们的代码。

    因此,过度的静态设计会给我们的程序带来包括内存泄漏在内的多种问题,一般情况下,如果可以不使用静态,应该尽量避免,保证系统中的每一处静态设计都有其明确的存在的意义。

(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
选择应用服务器的七个标准
Apache+Tomcat负载平衡设置实例详解
Tomcat 的数据库连接池设置与应用
Tomcat 配置技巧精华详解分析
保存Java程序状态及设置之Properties文件
Eclipse发布支持AJAX计划
 
最近评论:
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(3340)
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(6406)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(28)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(1890)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号