1700441800
1700441801
public class UtilsClass{
1700441802
1700441803
private UtilsClass(){
1700441804
1700441805
throw new Error(“不要实例化我!”);
1700441806
1700441807
}
1700441808
1700441809
}
1700441810
1700441811
如此做才能保证一个工具类不会实例化,并且保证所有的访问都是通过类名来进行的。需要注意一点的是,此工具类最好不要做继承的打算,因为如果子类可以实例化的话,那就要调用父类的构造函数,可是父类没有可以被访问的构造函数,于是问题就会出现。
1700441812
1700441813
注意 如果一个类不允许实例化,就要保证“平常”渠道都不能实例化它。
1700441814
1700441815
1700441816
1700441817
1700441819
编写高质量代码:改善Java程序的151个建议 建议43:避免对象的浅拷贝
1700441820
1700441821
我们知道一个类实现了Cloneable接口就表示它具备了被拷贝的能力,如果再覆写clone()方法就会完全具备拷贝能力。拷贝是在内存中进行的,所以在性能方面比直接通过new生成对象要快很多,特别是在大对象的生成上,这会使性能的提升非常显著。但是对象拷贝也有一个比较容易忽略的问题:浅拷贝(Shadow Clone,也叫做影子拷贝)存在对象属性拷贝不彻底的问题。我们来看这样一段代码:
1700441822
1700441823
public class Client{
1700441824
1700441825
public static void main(String[]args){
1700441826
1700441827
//定义父亲
1700441828
1700441829
Person f=new Person(“父亲”);
1700441830
1700441831
//定义大儿子
1700441832
1700441833
Person s1=new Person(“大儿子”,f);
1700441834
1700441835
//小儿子的信息是通过大儿子拷贝过来的
1700441836
1700441837
Person s2=s1.clone();
1700441838
1700441839
s2.setName(“小儿子”);
1700441840
1700441841
System.out.println(s1.getName()+“的父亲是”+s1.getFather().getName());
1700441842
1700441843
System.out.println(s2.getName()+“的父亲是”+s2.getFather().getName());
1700441844
1700441845
}
1700441846
1700441847
}
1700441848
1700441849
class Person implements Cloneable{
[
上一页 ]
[ :1.7004418e+09 ]
[
下一页 ]