Effective Java 学习笔记(15)
一个不可改变(immutable)的类,顾名思义,就是其实例不能改变,即里面所有的信息在创建时就赋值,在其生命周期中其值不变。
使用不可改变的类的优点在于,设计简单,易于实现和使用,具体来讲,它的状态机很简单,只有一个状态。它是线程安全,能够自由的被共享,能够通过静态工厂模式尽可能复用已经创建出来的对象,也不用为它写clone或是拷贝构造函数,不可改变的类也便于维护,是系统的良性基石。
其唯一的缺点就是,它必须为不同的值分别创造不同的对象。
使一个类为immutable,要做到以下几点。
1.不要提供任何可以修改对象中数据的方法。
2.确保此类不会被继承。这个可以防止子类不小心对父类中的数据进行更改。
3.使所有的字段为final.
4.使所有的字段为private.
5.确保所有字段中的可被改变的对象的引用不被外界获得。
但要注意的当实现序列化的时候,如果一个不可改变类中包含可改变类的引用,就必须提供一个显式的readObject或readResolve,或使用ObjectOutputStream.writeUnshared和OjbectInputStream.readUnshared方法。否则就攻击者就可能创建一个可以改变的实例。
总结:除非有足够的理由,应该将类设计为immutable。
如果一个类不能设计成immutable,那么尽量减少可改变的字段。
相关文档:
一、
GET
和
POST
的区别
1.GET
提交的是文本内容,规定其数据长度不超过
255
个字符。在
GET
方式提交的
URL
中会显示出提交的查询数据而却提交数据的缓存会在浏览器的
URL
历史状态中,这样我们往往在浏览网页的时候点击后退键不需要重新发送请求。
2.POST
提交的可以使文本内容,也可以使二进制内容,所 ......
一、
什么是
EL
?为什么要使用
EL
?
EL
,即
JSP
表达式语言(
expression_r_r Language
),它允许我们使用更简洁、更易读懂的语法来取代难以维护的
Java
脚本以及笨拙的
jsp:userBean,jsp:getProperty
,他让在
JSP
中完全消除了
Java
代码。
EL
的使用能够让
JSP
页面更有可读性,输出的嵌套的 ......
记得一年前,正是自己对java爱不释手的时候,而网上也是一波又一波的java嘲讽热,我愤怒了,就像人人都会捍卫自己喜欢的东西一样。我在内网一次又一次的发帖发泄,可能碍于我是版主,java批判者们也没有回帖。直到后来,大家认识我,都说路飞很擅长java,java很厉害。其实我只对J2SE略懂皮毛。我喜欢java的原因是,对于一个 ......
直接选择排序算法:从待排序的数据元素集合中选取最小的元素放到原始数据的第一个元素的位置上。然后不包括第一个元素的数据元素集合中找到最小的元素放到此集合中,依次类推,即可完成排序。
算法实现如下:
/**
* 直接选择排序
* @param a 用于排序的数组
* */
public void ......