effective java
feier7501
这个作者很懒,什么都没留下…
展开
-
第1条:考虑用静态工厂方法代替构造方法
静态工厂方法的一个好处是,与构造方法不同,静态工厂方法具有名字。 例如: BigInteger要产生一个素数,那么 public static BigInteger java.math.BigInteger.probablePrime(int bitLength, Random rnd) 比构造方法好,好在代码的可读性。 静态工厂方法的第二个好处是,与构造方法不同,他们每次被调用的原创 2013-02-25 21:27:11 · 739 阅读 · 0 评论 -
第9条:总是要改写toString
此约定不是很重要。JDK中就有很多类是没有重写toString方法的。但是,还是有些类重写了该方法,比如java.lang.StringBuffer。原创 2013-02-28 21:45:44 · 516 阅读 · 0 评论 -
第8条:改写equals时总是要改写hashCode
int java.lang.Object.hashCode() Returns a hash code value for the object. This method is supported for the benefit of hashtables such as those provided by java.util.Hashtable. The general contra原创 2013-02-28 21:38:51 · 680 阅读 · 0 评论 -
第7条:在改写equals的时候请遵守通用约定
boolean java.lang.Object.equals(Object obj) Indicates whether some other object is "equal to" this one. The equals method implements an equivalence relation on non-null object references:原创 2013-02-28 21:28:43 · 755 阅读 · 0 评论 -
第11条:考虑实现Comparable接口
/* * @(#)Comparable.java 1.26 06/04/21 * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */ package java.lang原创 2013-03-12 21:57:19 · 642 阅读 · 0 评论 -
第10条:谨慎地改写clone
/** * A class implements the Cloneable interface to * indicate to the {@link java.lang.Object#clone()} method that it * is legal for that method to make a * field-for-field copy of instance原创 2013-03-12 21:34:30 · 937 阅读 · 0 评论 -
第6条:避免使用终结函数
时间关键的任务不应该由终结函数来完成。 如果你为某个对象定义了finalize() 方法,JVM 可能不会调用它,因为垃圾回收器不曾释放过那些对象的内存。调用System.gc() 也不会起作用,因为它仅仅是给 JVM 一个建议而不是命令。根据 Java 文档,finalize() 是一个用于释放非 Java 资源的方法。但是,JVM 有很大的可能不调用对象的finalize() 方法,因此很难原创 2013-02-27 22:40:42 · 530 阅读 · 0 评论 -
第5条:消除过期的对象引用
JDK里的java.util.Vector类,其方法removeElementAt的代码如下: public synchronized void removeElementAt(int index) { modCount++; if (index >= elementCount) { throw new ArrayIndexOutOfBoundsException(原创 2013-02-27 22:19:28 · 532 阅读 · 0 评论 -
第2条:使用私有构造方法强化singleton属性
第一种方法: public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() { } } 第二种方法: public class Elvis { private static final Elvis INSTANCE = new Elvis()原创 2013-02-26 21:08:34 · 498 阅读 · 0 评论 -
第4条:避免创建重复的对象
String s = new String("silly"); 上面的代码,会创建一个新的String实例,每次都是新的内存地址,应该改为: String s = "silly"; 测试如下: String s1 = new String("silly"); String s2 = new String("silly"); System.out.println(s1原创 2013-02-26 21:45:57 · 457 阅读 · 0 评论 -
第3条:通过私有构造方法强化不可实例化的能力
企图通过将一个类做成抽象类来强制该类不可被实例化,这是行不通的。 例如: public abstract class Child { }public class Boy extends Child { } Child c = new Boy(); 抽象类Child可以被子类化,也可以被实例化为Boy。而且,别人可能以为Child类就是为了继承而设计的。 publi原创 2013-02-26 21:23:36 · 494 阅读 · 0 评论 -
第12条:使类和成员的可访问能力最小化
一个类中,不要这样定义数组: public static final Type[] values = new Type{...}; 应该定义成private的。 成员变量,都应该定义成private的。 新建类时,如果类所在的包的外面的程序,都不需要用到这个类,那么,这个类也应该去掉public修饰符。原创 2013-03-15 22:03:24 · 589 阅读 · 0 评论