- 浏览: 401435 次
- 性别:
- 来自: 北京
最新评论
-
c253898303:
求和的时候说是调用store的基础方法,这个能重写吗?如果可以 ...
给Extjs的GridPanel增加“合计”行 -
rhhao:
这个附件怎么用呢?
自己写段代码批量修改照片的Exif数据 -
AndLong:
【转】关于烂代码的那些事(下) -
TonyLian:
无意中翻出这篇老博文,文章中留下的遗憾“纯JSP如何获取req ...
Spring获得各种客户端HttpServletRequest的方法 -
TonyLian:
注释中应该写“这里为什么要做XXX”,“为什么这里没有做XXX ...
【转】关于烂代码的那些事(中)
文章列表
今天又重新整理了一下和集合类型相关的3篇文章,温故而知新。
线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构。这些类均在java.util包中。本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类。 Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set ├EnumSet ├HashSet └TreeSet Map ├TreeMap ├EnumMap ├Hashtable ├ ...
与本章(前面3条)所讨论的方法不同,compareTo方法在Object中并没有被声明,它是java.lang.Comparable接口中唯一的方法。实现这一接口,也可以说类具有了“内在排序能力”。
compareTo方法除了允许比较相等外,还可以比较大小。通常如果 x < y ,则 x.compareTo(y) 返回一个负整数(通常是 -1);如果 x.equals(y) == true ,则 x.compareTo(y) 返回 0;如果 x > y ,则 x.compareTo(y) 返回一个正整数(通常是 1)
compareTo具 ...
- 2009-05-11 15:40
- 浏览 1602
- 评论(0)
原作者在这一条上用了8页的篇幅,翻译版也有7页,足以说明这一条的重要性。我个人对此条的标注是重量级的5颗星!
克隆——是一个很让人“感兴趣”而又“颇有争议”的话题,无论是在生物界还是在代码的世 ...
所有类都应该有一个toString方法,这也是Object的约定。很明显在实际使用中,同样也是,每个类的实例对象,都该有个方法将人们感兴趣的内容以String类型返回,在没有跟踪工具的年代,我们就是靠着Debug这些toString来调试程序的。
这一条其实没有什么太多可写的,只要记住一点即可“将你所关心的、感兴趣的部分toString了就可以了”。现今而言,由于有了Eclipse、NetBeans这样的工具,在调试过程中依靠Debug toString的时候就不见了。剩下的就是那些可能要求被输出的类的toString方法了,一定要写好。例如:
/**
* R ...
- 2009-05-11 10:32
- 浏览 2965
- 评论(0)
《VS2005 C#学习实践笔记》
这是一篇几个月前我帮别人写的“作业”,现在“作业”没人收了,所以我就大胆的把它贴出来了,给自己留一个备份。虽然是以别人的口吻写的,但是故事确实是我自己遇到的。
序言:
...
- 2009-05-10 22:34
- 浏览 3124
- 评论(0)
一个很常见的错误根源在于没有改写hashCode方法。在每一个改写了equals的方法的类中,你必须也要改写hashCode方法。如果不这么做的话,就会违反Object.hashCode的通用约定,从而导致该类无法与所有基于散列值(hash)的集合类 ...
《第3章 对所有对象都通用的方法》
这是我认为最有用的一章,真的该好好问问自己,这些最最基础的东西,自己都掌握吗? Object是个即普通又特殊的类。说它普通是因为所有的类都是由它派生来的,说它特殊是因为 ...
- 2009-05-10 21:28
- 浏览 1280
- 评论(0)
终结函数(finalizer)通常是不可预测的,常常也是很危险的,一般情况下不是必要的。使用终结函数会导致不稳定的行为、更差的性能,以及带来移植性问题。不要把终结函数当做C++中的析构函数(destructors)的对应物。
我自己总结了一下这一条的综合性结论是这样的:
1)在涉及使用资源,使用完毕后要释放资源的情形下,首先要用一个显示的方法(应该是私有的)来释放这些资源;
2)在主方法中通过 try-catch-finally 的结构结合起来,try中写正常操作的代码,catch中处理异常,如写Log等,finally中通过调用1)中的显示的资源释放方法来释放资源( ...
我们喜爱Java的其中一个原因就是它的垃圾回收机制。绝大部分情况下,JVM都能过自动回收垃圾。
但是,在有些情形下,你还是要自己回收垃圾的,这些情形多是JVM无从通过“物理”性质来识别垃圾,而需要程序员通过“逻辑”性来判断哪些是垃圾并回收之。
所以,在支持垃圾回收的语言中,内存泄漏更应该被称之为“无意识的对象保持”。
例子:我们有两个String数组: a[100] 和 b[1000]。
现在要将a的所有元素拷贝给b(由于元素是String,所以写法和仅仅赋地址看起来是一样的),前提:不能改变b的地址,也就是不能new它(可能其它地方还保留着b的地址而且要用 ...
- 2009-05-05 10:29
- 浏览 1326
- 评论(0)
此条在中文版第二版中被译为了“避免创建不必要的对象”,用此更加严谨了。
此条认为重复使用同一对象,比每次需要时都创建一个功能上相等价的新对象更好。如果对象是非可变的(见【第13条】),那么他总是可以被 ...
- 2009-05-05 10:10
- 浏览 1296
- 评论(0)
有时候你可能编写出只包含静态方法和静态域的类。这样的类有一些很不好的名声,因为有些人在面向对象的语言中滥用这样的类来编写过程化的程序。
对原文这句话的理解,我有着深刻的印象,有很多从VB6工程转过来做Java或C#(包括VB.Net)的程序员,在抱怨:还是VB6好用,各种方法简单明了,像什么 left() trim() split() cstr() replace() 等方法多简单好用。到了这些面向对象的语言里,还非得 Class.function() 的使用。
值得庆幸的是,他们只发现原来VB6的那些库函数用起来变得要在前面加上一个类的名字。原 ...
- 2009-05-04 12:42
- 浏览 2291
- 评论(0)
singleton即单例模式。【第1条】中我提到的Session性质的全局唯一实例既是单例模式。它只能被实例化一次,通常代表本质上具有唯一性质的东西。
除了Session的例子外,我这里还有一个很微妙的例子:
new MessageBox(&quo ...
- 2009-05-04 11:07
- 浏览 1759
- 评论(0)
《第2章》创建和销毁对象(第1~6条)
【第1条】考虑用静态工厂方法代替构造函数
所谓静态工厂方法,实际上只是一个简单的静态方法,它返回的是类的一个实例。
使用静态工厂方法的好处:
1)它与构造函数不同, ...
- 2009-05-04 10:24
- 浏览 5159
- 评论(0)
上周无意中在同事的桌案上发现了这本书《Effective Java中文版》,翻了一下前言,我就被它深深地吸引住了。 首先,此书曾获得第12届软件开发图书大奖;其次作者是SUN公司(现在已经改头换面了)的高级工程师,java.uti ...
- 2009-05-04 09:28
- 浏览 1660
- 评论(0)
编者按:这是我目前看过的,讲解Spring的最为深入浅出的文章,建议你逐句仔细研读,包括每个代码片段。
原作者,确实是用心去写的。
可能大部分知识你已经是掌握的,但可以进一步温故而知新,加深理解。
《初学者对Sprin ...
- 2009-02-18 10:37
- 浏览 1261
- 评论(0)