Java学习手册:不可变类

版权声明:本文为博主原创文章,未经博主允许不得转载,转载请务必注明出处: https://blog.csdn.net/MaybeForever/article/details/89105967

不可变类(immutable class)是指当创建了这个类的实例后,就不允许修改它的值了,也就是说,一个对象一旦被创建出来,在其整个生命周期中,它的成员变量就不能被修改了。它有点类似于常量(const),即只允许别的程序读,不允许别的程序进行修改。

在Java类库中,所有基本类型的包装类都是不可变类,例如Integer、Float等。此外,String也是不可变类。

要创建一个不可变类需要遵循下面4项基本原则:
(1)类中所有成员变量被private所修饰。
(2)类中没有写或者修改成员变量的方法,例如setXXX,getXXX,只提供构造函数(最好是带参数的),一次生成,永不改变。
(3)确保类中所有方法不会被子类覆盖,可以通过把类定义为final或者把类中的方法定义为final来达到这个目的。
(4)如果一个类成员不是不可变量,那么在成员初始化或者使用get方法获取该成员变量时,需要通过clone方法来确保类的不可变性。

package com.haobi;
import java.util.Date;
/*
 * 不可变类
 */

class ImmutableClass{
	private Date d;
	public ImmutableClass(Date d) {
		this.d = (Date)d.clone();//解除引用关系
	}
	public void printState() {
		System.out.println(d);
	}
	public Date getDate() {
		return (Date)d.clone();
	}
}
public class Immutable {
	public static void main(String[] args) {
		Date d = new Date();
		ImmutableClass ic = new ImmutableClass(d);
		ic.printState();
		d.setMonth(5);
		ic.printState();
	}
}
//程序输出结果如下:
Mon Apr 08 20:24:49 CST 2019
Mon Apr 08 20:24:49 CST 2019

Java语言中之所以设计很多不可变类,主要是不可变类具有使用简单、线程安全、节省内存等优点,但不可变类也有其缺点,例如,不可变类的对象会因为值的不同而产生新的对象,从而导致无法语料的问题。

猜你喜欢

转载自blog.csdn.net/MaybeForever/article/details/89105967