1.进行浅拷贝时,只是复制原始数据类型的值,则可以通过覆盖Clone方法来达到.另外,在进行浅拷贝的时候,还要注意,成员对象中不应该要有引用类型,如果有引用类型,那么,进行了浅拷贝之后,两个对象将会共享成员引用所指向的对象,这会出现问题.所以,在这种情况下,干脆直接使用深拷贝,避免问题出现.2.对于深拷贝,也就是完全将对象的内容复制一份,则使用序列化来实现,也是为了避免覆盖Clone. 浅拷贝的例子: 这个例子,只是复制成员的值,成员的类型都是原始数据类型,不包含引用类型: public c…
No38 检查参数的有效性 对于公有的方法,要用Javadoc的@throws标签(tag)在文档中说明违反参数值时会抛出的异常.这样的异常通常为IllegalArgumentException.IndexOutOfBoundsException或NullPointerException. /** * ... * @throws ArithmeticException if m is less than or equal to 0 */ public BigInteger mod(BigInte…
第39条 必要时进行保护性拷贝 对于可变类,如果作为参数传入到自己的类里,并作为自己类的数据使用存储时,需要进行保护性拷贝,比如Date是可变的,如果传入一个Date类,最好做一个保护性拷贝,以免在调用完Period后,外面将传入的参数start进行更改,影响自己类的this.start: public Period(Date start) { this.start = new Date(start.getTime()); } 同理,如果是作为返回对象,也需要做返回的保护性拷贝 public D…
package cn.xf.cp.ch02.item9; import java.util.HashMap; import java.util.Map; public class PhoneNumber { private final short areaCode; private final short prefix; private final short lineNumber; public PhoneNumber(int areaCode, int prefix, int lineNum…
package cn.xf.cp.ch02.item8.transitivity; public class Point { private final int x; private final int y; public Point(int x, int y) { this.x = x; this.y = y; } @Override public boolean equals(Object obj) { if(!(obj instanceof Point)) { return false;…