不可变类

来源:互联网 发布:java一行输出多个变量 编辑:程序博客网 时间:2024/05/23 07:22

1)不可变类:创建了这个类的实例后,就不允许改变他的值,即一个对象一旦被创建,在整个生命周期中,他的成员变量就不能被修改。

Java中包装类IntegerLong就是不可变类,String也是不可变类。设计简单、线程安全。

(2)不可变类遵守4条基本原则:

1)类中成员都用private修饰

2)没有修改成员的方法,如setXXX(),只提供构造器,一次生成不改变。

3)类中方法不会被重写,即final方法

4)如果一个成员不是不可变的(即final的),那么在成员初始化和get等获取方法时需要通过clone()来保证类的不可变性。

//不可变类class  A{private Date d;//非final成员public A(Date d){this.d=d;}public void print(){System.out.println(d);}}class B{private Date d;public B(Date d){this.d=(Date)d.clone();//借助clone解除了引用关系}public void print(){System.out.pritnln(d);}public Date getDate(){return (Date)d.clone();//借助clone解除了引用关系}}public class Main{public static void main(String[] args){Date d=new Date();A a=new A(d);a.print();//d.setMouth(5);a.print();//两次输出的结果是不同的 因为Date对象是可以被动改变的B b=new B(d);b.print(b);d.setMouth(4);b.pritn(b);//两次输出的结果是相同的}}