Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3968705
  • 博文数量: 366
  • 博客积分: 9916
  • 博客等级: 中将
  • 技术积分: 7195
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-29 23:27
个人简介

简单!

文章分类

全部博文(366)

文章存档

2013年(51)

2012年(269)

2011年(46)

分类: Java

2012-10-04 18:05:41

       通常创建一个对象后,它的内容是允许随后改变的。有时候,也需要创建一个一旦创建,其内容就不能再改变的对象。我们称这种对象为一个不可变对象(immutable object),而它的类就称为不可变类(immutable class)。例如:String类就是不可变的。

       如果一个类是不可变的,那么它的所有数据域必须都是私有的,而且没有对任何一个数据域提供公共的set方法。一个类的所有数据都是私有的且没有修改器,并不意味着它一定是不可变类。例如下面的Student类,它的所有数据域都是私有的,而且也没有set方法,但它不是一个可变的类。

  1. public class Student {
  2.     private int id;
  3.     private String name;
  4.     private java.util.Date dateCreated;

  5.     public Student(int ssn, String newName) {
  6.          id = ssn;
  7.          name = newName;
  8.          dateCreated = new java.util.Date();
  9.      }

  10.      public int getId() {
  11.          return id;
  12.      }

  13.      public String getName {
  14.          return name;
  15.      }

  16.      public java.util.Date getDateCreated() {
  17.          return dateCreated;
  18.      }
  19. }
       如下面的代码所示,使用getDateCreated()方法返回数据域dateCreated。它是对Date对象的一个引用。通过这个引用,可以改变dateCreated的值。

  1. public class Test {
  2.     public static void main(String[] args) {
  3.         Student student = new Student(123,"John");
  4.         java.util.Date dateCreated = student.getDateCreated();
  5.         dateCreated.setTime(200000);
  6.     }
  7. }
       要使一个类成为不可变的,它必须满足下面的需求:1、所有数据域都是私有的;2、没有修改器方法;3、没有一个访问器方法,它会返回一个指向可变数据域的引用。


阅读(1963) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~