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

本月文章推荐
.基本的osworkflow API.
.SonyEricsson发布更好支持企业级.
.谈java的学习方向.
.java网络五子棋的源代码.
.管理 Java 类路径(UNIX 和 Mac .
.小写金额转成大写算法.
.Java核心代码例程之:CalendarDe.
.Java入门学习指导之最佳方向.
.百分之百纯Java(TM)--名词解释.
.步入J2EE架构和过程基础教程(1).
.Java多媒体框架设计自动播放机实.
.Java语言基础 四.
.tomcat配置多个域名的问题.
.一个简单的Timer Service.
.Java Servlet 编程及应用之二.
.Eclipse照亮Java众生 扩大地盘.
.漫谈EJB——Enterprise JavaBean.
.Weblogic的结构特点.
.谈谈J2SE中的序列化之一个感性的.
.Java让Web显示数学特殊符号.

《Effective Java》学习笔记(2)

发表日期:2008-1-5 |



这是第2篇

二。对于所有对象都通用的方法

主要介绍如何正确地改写Object类中的非final方法。

第7条:在改写equals的时候请遵守通用的约定

    改写equals方法所必须遵守的几个约定

1。自反性:X.equals(X)必须返回true

2。对称性:Y.equals(X)返回的必须和X.equals(Y)一致

3。传递性:X.equals(Y),Y.equals(Z)假如返回true的话,那么X.equals(Z)也必须返回true

4。一致性:多次调用X.equals(Y)返回的值应该是一致的

5。非空性:X.equals(null)必须返回false

这里最轻易产生错误的是第2和第3条。要保证第2条你必须保证不扩大比较的对象的范围。而第3条产生的问题一般在继续的过程中,子类扩展了父类,增加了新的变量,涉及到面向对象关系理论的一个基本问题,那就是:

要想在扩展一个可实例化的类的同时,既要增加新的特征,同时还要保留equals约定,没有一个简单的方法可以做到这一点。

撰写高质量的equals方法的一些处方或者说告戒:

a.使用"=="检查引用是否为空

b.使用instanceOf检查对象的类别是否正确

c.把实参转换到正确的类型,并保证实际参数中的"要害域"与当前对象中对应的域是否匹配

d.编写完equals之后应该检查是否满足:对称性,传递性,一致性

e.当你改写equals的时候,总要改写hashCode

f.不要企图让equals方法过于聪明,加入太多等价关系比较只会让事情变糟糕

g.不要使equals方法依靠于不可靠的资源

h.不要使equals声明中的Object对象替换为具体的类型对象



不过,你可以用组合代替继续,在新的类中加入一个原有类的对象,而不是继续它,这样就不会碰到保持equals的问题了。



第8条:在改写equals时总是要改写hashCode

    假如不这样做的话,就导致该类无法与所有基于散列值的集合类型一起正常工作,如HashSet,HashMap。一个理想的散列函数应该把一个集合中的不相等的对象均匀的分布到所有可能的散列值上,书中提供了一种方法接近理想状态

1.把某个非0的常整数保存在一个叫result的int型变量中

2。对于对象中的每一个要害域f完成下列步骤

a。为该域计算散列码c:

   i.假如是boolean      f?0:1

  ii.byte,char,shor,int型     (int)f

  iii.long型        (int)(f^(f>>32))

   ivfloat型      Float.floattoIntBits(f)

   v.double型  Double.doubletoLongBits(f)得到一个long型,然后按iii计算

   vi.假如是一个对象引用可以递归调用hashCode()或者计算一个另外的“规范表示”

   vii。假如是一个数组,则把每一个元素当作一个单独的域来处理

b.按公式计算散列码 result=37*result+c;

3。返回result

还一点,一定要包括该类的要害性的变量,不要试图通过排除一个对象的要害部分来获得性能的提高

第9条:总是改写toString()

这一条更多的是为了提供更有价值的信息给使用者,我很少使用这点,惭愧



第10条:谨慎地改写clone()

实现对象的深层拷贝。可以这样认为,clone()方法是另一个构造函数!要编写一个行为正确的clone()方法,非凡是对于一些类的内部具有可变的域是相当困难的。首先你必须实现cloneable接口,在clone()方法中调用super.clone(),然后修改任何需要修改的变量。例如,要对上一骗文章的Stack撰写一个正确的clone方法如下

public Object clone() throws CloneNotSupportedException{

     Stack result=(Stack)super.clone();

      result.elements=(Object)elements.clone();

      return result;

}

前提要求elements不是final.

clone()方法的改写是复杂的,甚至是危险的,还有另一种方法来提供拷贝对象的功能,那就是拷贝构造函数。这同样不是C++专有的概念。

例如public Example(Example),你传入一个同类型的对象,然后在这个构造函数中做变量的拷贝就OK了。相比于Cloneable接口的复杂度,这是一个更好的解决办法。

第11条:考虑实现Compareable接口

此接口的实现类似于equals方法,也要保持对称,传递,一致等特性,具体不再介绍,假如你需要对某个类的对象实行排序等算法或者与Collections Framework中的类打交道,你该考虑实现这个接口
上一篇:《Effective Java》学习笔记(3) 人气:464
下一篇:《Effective Java》学习笔记(1) 人气:465
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-13 爬爬思特新闻管理系统 v2.0 Beta1
2008-10-13 Pligg v9.9.5 Beta
2008-10-13 广优邮件发送系统 v2.1
2008-10-13 缤纷互动视频交友 v3.1 RC
2008-10-13 MyShop网络商城 build 081005
2008-10-13 Chyrp 超轻量级开源博客引擎 v2.
2008-10-13 162100静态(论坛/文章)系统 v2.4
2008-10-13 金博人才招聘求职网黄金版 v4.2
2008-10-13 愚人笔记 v4.0
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | 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号