动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.RemoteManager的配置.
.Redhat 下安装 Tomcat 之完全指南.
.Java嵌入式开发(1).
.对等点如何彼此定位实现交互功能.
.在java中找到需要的资源文件路径.
.在Weblogic上配置Hibernate为JND.
.Java的文件与磁盘操作.
.Java性能优化之通用篇.
.介绍访问控制.
.java基础:java日期加减法.
.JavaSwing中三种事件处理方法之比.
.判断鼠标双击.
.在Java程序中采用线程获取优异性.
.JAR进阶(下).
.Guice与Spring框架的区别.
.基于Java的移动游戏开发入门.
.再谈JAVA学习入门.
.JavaBean入门.
.JAVA使用XML作为持久存储介质实现.
.Java开发为什么需要UML.

继承和finalize()

发表日期:2008-1-5 |



  通过“合成”方法创建新类时,永远不必担心对那个类的成员对象的收尾工作。每个成员都是一个独立的对象,所以会得到正常的垃圾收集以及收尾处理——无论它是不是不自己某个类一个成员。但在进行初始化的时候,必须覆盖衍生类中的finalize()方法——假如已经设计了某个非凡的清除进程,要求它必须作为垃圾收集的一部分进行。覆盖衍生类的finalize()时,务必记住调用finalize()的基础类版本。否则,基础类的初始化根本不会发生。下面这个例子便是明证:
  
  //: Frog.Java
  // Testing finalize with inheritance
  
  class DoBaseFinalization {
   public static boolean flag = false;
  }
  
  class Characteristic {
   String s;
   Characteristic(String c) {
    s = c;
    System.out.println(
     "Creating Characteristic " + s);
   }
   protected void finalize() {
    System.out.println(
     "finalizing Characteristic " + s);
   }
  }
  
  class LivingCreature {
   Characteristic p =
    new Characteristic("is alive");
   LivingCreature() {
    System.out.println("LivingCreature()");
   }
   protected void finalize() {
    System.out.println(
     "LivingCreature finalize");
    // Call base-class version LAST!
    if(DoBaseFinalization.flag)
     try {
      super.finalize();
     } catch(Throwable t) {}
   }
  }
  
  class Animal extends LivingCreature {
   Characteristic p =
    new Characteristic("has heart");
   Animal() {
    System.out.println("Animal()");
   }
   protected void finalize() {
    System.out.println("Animal finalize");
    if(DoBaseFinalization.flag)
     try {
      super.finalize();
     } catch(Throwable t) {}
   }
  }
  
  class Amphibian extends Animal {
   Characteristic p =
    new Characteristic("can live in water");
   Amphibian() {
    System.out.println("Amphibian()");
   }
   protected void finalize() {
    System.out.println("Amphibian finalize");
    if(DoBaseFinalization.flag)
     try {
      super.finalize();
     } catch(Throwable t) {}
   }
  }
  
  public class Frog extends Amphibian {
   Frog() {
    System.out.println("Frog()");
   }
   protected void finalize() {
    System.out.println("Frog finalize");
    if(DoBaseFinalization.flag)
     try {
      super.finalize();
     } catch(Throwable t) {}
   }
   public static void main(String[] args) {
    if(args.length != 0 &&
      args[0].equals("finalize"))
      DoBaseFinalization.flag = true;
    else
     System.out.println("not finalizing bases");
    new Frog(); // Instantly becomes garbage
    System.out.println("bye!");
    // Must do this to guarantee that all
    // finalizers will be called:
    System.runFinalizersOnExit(true);
   }
  } ///:~
  
  DoBasefinalization类只是简单地容纳了一个标志,向分级结构中的每个类指出是否应调用super.finalize()。这个标志的设置建立在命令行参数的基础上,所以能够在进行和不进行基础类收尾工作的前提下查看行为。
  
  分级结构中的每个类也包含了Characteristic类的一个成员对象。大家可以看到,无论是否调用了基础类收尾模块,Characteristic成员对象都肯定会得到收尾(清除)处理。
  
  每个被覆盖的finalize()至少要拥有对protected成员的访问权力,因为Object类中的finalize()方法具有protected属性,而编译器不答应我们在继续过程中消除访问权限(“友好的”比“受到保护的”具有更小的访问权限)。
  
  在Frog.main()中,DoBaseFinalization标志会得到配置,而且会创建单独一个Frog对象。请记住垃圾收集(非凡是收尾工作)可能不会针对任何特定的对象发生,所以为了强制采取这一行动,System.runFinalizersOnExit(true)添加了额外的开销,以保证收尾工作的正常进行。若没有基础类初始化,则输出结果是:
  
  not finalizing bases
  Creating Characteristic is alive
  LivingCreature()
  Creating Characteristic has heart
  Animal()
  Creating Characteristic can live in water
  Amphibian()
  Frog()
  bye!
  Frog finalize
  finalizing Characteristic is alive
  finalizing Characteristic has heart
  finalizing Characteristic can live in water
  
  从中可以看出确实没有为基础类Frog调用收尾模块。但假如在命令行加入“finalize”自变量,则会获得下述结果:
  
  Creating Characteristic is alive
  LivingCreature()
  Creating Characteristic has heart
  Animal()
  Creating Characteristic can live in water
  Amphibian()
  Frog()
  bye!
  Frog finalize
  Amphibian finalize
  Animal finalize
  LivingCreature finalize
  finalizing Characteristic is alive
  finalizing Characteristic has heart
  finalizing Characteristic can live in water
  
  尽管成员对象按照与它们创建时相同的顺序进行收尾,但从技术角度说,并没有指定对象收尾的顺序。但对于基础类,我们可对收尾的顺序进行控制。采用的最佳顺序正是在这里采用的顺序,它与初始化顺序正好相反。按照与C++中用于“破坏器”相同的形式,我们应该首先执行衍生类的收尾,再是基础类的收尾。这是由于衍生类的收尾可能调用基础类中相同的方法,要求基础类组件仍然处于活动状态。因此,必须提前将它们清除(破坏)。
上一篇:类和对象的兼容性 人气:435
下一篇:内部类标识符 人气:680
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-10 企业网站智能管理系统(TZIMS) v6
2008-10-10 拓文asp.net网站内容管理系统 v6
2008-10-10 动网论坛PHP版 v2.0++ Build 081
2008-10-10 免费时代CMS v5.0
2008-10-10 wodig第四季中文DIGG社区 v4.1 b
2008-10-10 老Y文章管理系统 v2.2 bulid 081
2008-10-10 魔法盒动感相册 ASP+SQL版 v2.0
2008-10-10 Asoft签到管理系统 v3.0 Pack1
2008-10-10 哥特人音乐网潮流留言本 v1.1
2008-9-29 酷狗音乐(原KuGoo)2008 v5.310 正
2008-9-29 QQTab 1.1
2008-9-29 网络传送带 Net Transport 2.64a
2008-9-29 谷歌金山词霸v1.8
2008-9-29 TweakVI 1.0 Build 1090
2008-9-29 ACDSee Pro 2.5 Build 333 汉化绿
2008-9-29 Winamp v5.541(2189) 周明波简体
2008-9-27 CCleaner 2.12.651
2008-9-27 Mozilla Thunderbird 2.0.0.17 英
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成