<%@ 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-28
       一个对象的创建和销毁是编程中最基本的用法,先谈谈对象创建。我们常用的对象创建方法有三种:构造函数,静态工厂方法和对象池。
   
        跟C++一样,Java中也有所谓的缺省构造函数,也就是没有任何参数的构造函数。Java的构造函数有几个基本的特性:
1)如果类中没有显式的制定构造函数的时候,编译器会自动为该类添加一个缺省的构造函数;
2)如果类中有明确定义了一个以上的构造函数,编译器则不会再为该类自动添加任何构造函数;
3)编译器在调用子类的每个构造函数之前会先调用该父类的缺省构造函数。

        利用以上的特性,我们可以通过显式定义一个非缺省构造函数,同时不显式定义缺省构造函数来使得该类不可被继承。这个技巧意义不大,因为我们也可以简单地通过final关键字来指明该类不可被继承。但是反过来就是一个值得注意的地方,如果我们希望某类可以被继承,那么在定义了非缺省构造函数之后,要记得显式定义一个缺省构造函数。这是一个编程初手容易犯的错误,有一些初学者经常会忘了在这种情况下显式定义一个缺省构造函数而导致该类不可被继承。

        通过将所有的构造函数私有化,我们可以实现类的不可实例化。在一些工具类上我们经常可以看到这种做法。我们也可以将某类定义为抽象类来实现其不可实例化。但两者比较起来,前者会更优雅,更明确,因为将某类定义为抽象类会误导用户去继承它。同时,这个技巧也会使得该类不可被继承,所以我们要根据实际情况来恰当选择是用抽象类还是使用私有化构造函数。

        除了普通的构造函数之外,我们有时也会通过一些工厂方法来创建对象,也就是Factory,Factory Method和Singleton等设计模式的应用。在使用singleton模式的时候,我们要记得将构造函数私有化,只有这样才能真正保证该类具有唯一实例。此外,如果某个类同时提供了静态工厂方法和构造函数,我们要优先考虑前者,因为这样可以减少对象的创建。我们还经常使用对象池来创建对象。但是对于对象池的使用必须慎重,在现有的JVM中,小对象的创建和回收是很快的,只有当对象是重量级的时候,使用对象池才会有意义,否则反而会使得程序不够清晰,简洁。

       在Java中有明确的构造函数,但是并不象C++,它没有析构函数。Java是通过finalizer( )方法来进行对象的销毁。而子类的finalizer方法并不会象前文所提的构造函数一样,主动调用父类的相应方法,因此一旦我们调用了finalizer方法,一定不要忘记先调用super.finalizer(), 这一点也是一些初手容易混淆的。在实际使用中,我们应该尽量避免显式的调用finalizer,因为在虚拟机规范中,对该方法的执行并没有明确的规定,不同的JVM实现有自己不同的算法来安排finalizer,因此我们不能保证该方法能及时调用,甚至无法保证执行。
(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
J2ee应用程序设计――多层框架
怎样设计框架
设计模式:设计自己的MVC框架
JAVA设计模式之事务处理
visitor模式概念——visitor模式进一步
有关Sybase系统的数据同步与复制问题
 
最近评论:
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(4303)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(3233)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(2568)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(5087)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

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