zoukankan      html  css  js  c++  java
  • Java immutable class

    可变类:类的实例创立之后,还可以修改这个实例的内容。

                比如创建一个3*3的矩阵,如果设立了set function,在main中可以用set更改对应位置元素的大小。

    不可变类:就是类的实例一旦被建立,状态不会发生变化,成员变量不能被更改。

                即:Class被定义为final,避免被继承;

                      所有的成员变量都是private/final的;

                      不能提供改变类状态(成员变量)的方法,没有成员的set function;

                      所有方法不能被重载;

                      Constructor不要引用外部可变对象,如果引用了,即某个类成员不是原始变量或者不可变类,必须在初始化的时候进行defensive copy,确保类不可变。

    在JDK中,String,the primitive wrapper classes, and BigInteger and Big Decimal都是不可变类。

    以String作为例子,如果一个类是不可变类,以建立的实例状态不可改变,但是这个类还是可以有改变状态的方法,其根本就是创建新的对象。

    String A1 = "A";

    String A2 = "A"; //不会创建一个新的object,这两个是一样instance。不可变类可以缓存实例进行重复使用,提高计算性能。

    String B1 = new String("A");//创建了新的object

    String B2 = new String("A");//创建了新的object,B1和B2是不同的instance。

    String a = "abc";

    String e = "a";

    e.add();//false,String is immutable

    e+="bc";

    if(c==e) //false 

    if(c.equals(e))//true letter same

    还有一个例子,解释了如果对一个包含不可变对象引用的变量上进行计算,这个时候需要 赋值 这个步骤。例子引用网站:

    http://www.jb51.net/article/37889.htm

    tips: 强不可变类:final class。弱不可变类: 所有方法加final

    如果一个类成员不是原始变量或者不可变类,必须在初始化的生活实用深度copy,确保类不可变。

  • 相关阅读:
    P1194 买礼物(建模)
    024 Android 对话框(AlertDialog)的应用(与Android黑马培训班的024相对照学习)
    023 Android 滚动视图(ScollView)
    022 Android 开源项目使用指南
    021 Android 日历视图(Calendarview)
    020 ProgressBar(进度条)、SeekBar(拖动条)与星级评分条(RatingBar)
    019 Android 程序调试技巧汇总
    018 Android 单选按钮(RadioButton)和复选框(CheckBox)的使用
    017 Android ToggleButton(开关函数)与switch (开关按钮)
    016 Android Toast语句应用
  • 原文地址:https://www.cnblogs.com/amberdata/p/5327581.html
Copyright © 2011-2022 走看看