动态网站制作指南 [  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教程 ]的信息

本月文章推荐
.Java软件开发学习笔记(二).
.Hibernate Annotations&nbs.
.十年之后 Java技术的新方向.
.Tree图全功略.
.Javascript实例教程(19) 使用HoT.
..NET 和智能传输服务API编写自动.
.Web 服务代理组件创建 JSF Web 服.
.Think in java 3rd 中文版3.
.安全的基础--学习java安全之前的.
.CheckStyle及其配置的详细解释.
.Java中使用DirectDraw.
.Eclipse 的字符串分区共享优化机.
.浅谈Java中的存储空间类型.
.Microsoft Visual Studio .NET 系.
.struts 开发.
.Shark api 应用:获得父流程(par.
.Java做一个最简单的通话程序.
.用Java创建带图像的菜单来美化界.
.J2SE 1.5 in a Nutshell 中文版(.
.Java核心代码例程之:DatagramSe.

诊断和纠正Java程序中反复出现的错误类型

发表日期:2008-1-5 |



  诊断和纠正 Java 程序中反复出现的错误类型
Eric E. Allen
软件工程师,Cycorp, Inc.
2001 年 2 月

欢迎光临诊断 Java 代码,一个隔周更新的新专栏,着重讨论和您日常编程工作有关的 Java 解决方案。本文为第一篇,介绍了错误模式的概念,一个非常有用的概念,它将提高您检测和修正代码中错误的能力。您会了解到一种最普遍的错误模式,这将为您开始识别和避免更高级的错误模式奠定基础。
错误模式和它们为什么有用
正如好的编程技能涉及很多设计模式(您可以在不同的程序上下文中组合和应用这些模式)的知识一样,好的调试技能也涉及对 错误模式的一定了解。错误模式就是已发出的错误和程序中潜在的错误之间的重复出现的相互关系。这种概念对编程来说并不新鲜。医生们在诊断疾病时依靠相似类型的相互关系。他们在实习期间通过和资格较老的医生共同工作来学习这些。他们的教育就是集中在做这种诊断上的。相反,我们软件工程师的教育是集中在过程设计和算法分析上的。这些技能固然重要,但是人们对调试过程的教育却很少关注。相反,我们得自己去“拾起”这种技能。随着极端编程的出现和它对单元测试的注重,这种做法已经开始改变了。但是频繁的单元测试只是解决了问题的一部分。一旦发现错误,就必须诊断和纠正它们。幸运的是,很多错误都遵循我们可以识别的几种错误模式的其中一种。一旦您可以识别出这些错误模式,您就可以诊断出错误的原因并且更快地纠正它了。

错误模式与反模式有关,反模式是一次又一次被证实是失败的公共软件设计的模式。虽然反模式是设计模式,错误模式却是与编程错误相关的错误的程序行为的模式。这与设计根本没有关系,而是与编程和调试过程有关。

通过示例学习
为了说明错误模式后面的思想,让我们来考虑一种基本错误模式,编程新手(经常还有更高级的程序员)经常会碰到这种错误模式。在后面的文章中,我们会谈到更高级的错误模式。对每一种模式,我会讨论将有助于把该模式的错误的发生控制到最少的编程原则(并非暗示所有的错误都是不遵循编程原则的结果;不管我们遵循多少原则,我们都会犯错误)。

为了分类起见,我会使用下面的形式(从医学上借用一些术语)来概括错误模式描述:

模式名称
症状
起因
治疗方法和预防措施
Rogue Tile 模式
也许它是编程新手中最普遍的错误模式,起因是复制和粘贴一段代码到程序的其它部分。有时,复制的一小部分因为功能上需求的略微不同而作了改动。不可避免地,错误在一个副本中被修正了,而在另一个副本中没有被修正,这样在错误症状复发时就会让您很头疼。尽管大多数程序员很快就熟悉了这种错误模式,但他们中很少人采取适当的措施来将这种错误的出现控制到最少。您很轻易就会偷懒不去思考而简单地复制您认为已经可以运行的代码。但是工作效率由于修正代码而丧失,这是因为不加选择的复制?粘贴操作很快降低了复制代码带来的任何工作效率。

我称此为 Rogue Tile 模式是因为,一段代码的各个副本可以被看成是分布在程序中的“tile”。由于不同副本中的代码出现了差异,副本就变成了“rogue tile”。

症状
这种错误的模式的最普遍症状是,在您认为已经修正了问题以后,程序还继续表现出错误的行为。

起因
为了理解这种情况发生的原因,我们来看看下面的二元树类层次结构:

public abstract class Tree {

}

public class Leaf extends Tree {

public Object value;
...
}

public class Branch extends Tree {

public Object value;
public Tree left;
public Tree right;
...
}

对于这些类要注重的第一件事就是,两种具体类都包含 Object 类型的 value 字段。假如您决定稍后让树包含,比如说,Interger,您也许会忘记更新其中的一个字段声明。假如程序的其它部分需要这些字段是 Interger 的话,程序就很可能不会编译。您或许记得您改变了其中一个类的 value 字段的类型,却忽略了一个事实,就是您没有在其它类中作相应的改变。

一些预防措施
当然,这个示例所示的错误是编程新手可以很快学会通过分解出公共代码来避免的。在本例中,字段声明应该移到 Tree 类中。它的两个子类就会继续这个字段,而且对字段声明的任何改变都只需要在一个地方出现。

继续看这个示例,我们可能还会编写在一个 Tree 中相加和相乘所有节点的方法。为了简单起见,我将以递归的方式来编写这些方法。

// in class Tree:

public abstract int add();
public abstract int multiply();

// in class Branch:

public int add() {
return this.value.intValue() + left.add() + right.add();
}

public int multiply() {
return this.value.intValue() * left.multiply() + right.multiply();
}

// in class Leaf:

public int add() { return this.value.intValue(); }
public int multiply() { return this.value.intValue(); }

请注重我在 multiply 方法中为 Branch 类引入的错误:我没有用第三项去乘,而是加了它。
上一篇:在java中编程实现数字签名系统 人气:709
下一篇:Java游戏编程读书笔记 人气:644
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-12-4 PhpCMS2008 bulid 081203 简体中
2008-12-4 Menalto Gallery v1.5.10 多国语
2008-12-4 Phpcms2008 bulid 081203 简体中
2008-12-4 乘风多用户计数器 v3.92 (Acc)
2008-12-4 乘风多用户计数器 v3.92 (Sql)
2008-12-4 BBSxp 2008 8.0.5 SP2 Build 081
2008-12-4 ASBLOG v2.5 bulid 081118(1201)
2008-12-4 非零坊幽默短信 v3.4
2008-12-4 红茶巴士(公交)查询系统 v3.0
2008-11-29 Tencent Traveler 4.4
2008-11-29 龙卷风网络收音机 v3.0.0.0
2008-11-29 Intel Chipset Software Install
2008-11-29 TweakVI 1.0 Build 1100
2008-11-29 Opera 9.62 Build 10469
2008-11-29 MPlayer WW编译版 SVN-r28044(20
2008-11-29 NetTools网络工具v1.0.0破解版
2008-11-29 3DGallery三维体验1.1破解版
2008-11-29 SecretBook保密本v1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | OPEN参数生成器 | 弹出式窗口代码产生器 | 密码登录生成器 | 在线按钮生成器 | Meta标签生成器 | 多色彩特效字代码生成器 | 网页代码调试器 | 在线FTP登陆 | Flash取色器 | 配色代码对照表 | 配色辞典 | CSS生成器 | 广告代码 | 框架网页代码生成器 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | 在线调色板 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 元素周期表 | 健康查询 | 世界时间 | 万年历 | 二十四节气 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2009 www.knowsky.com All rights reserved | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成