易截截图软件、单文件、免安装、纯绿色、仅160KB

Effective Java 学习笔记(15)

一个不可改变(immutable)的类,顾名思义,就是其实例不能改变,即里面所有的信息在创建时就赋值,在其生命周期中其值不变。
使用不可改变的类的优点在于,设计简单,易于实现和使用,具体来讲,它的状态机很简单,只有一个状态。它是线程安全,能够自由的被共享,能够通过静态工厂模式尽可能复用已经创建出来的对象,也不用为它写clone或是拷贝构造函数,不可改变的类也便于维护,是系统的良性基石。
其唯一的缺点就是,它必须为不同的值分别创造不同的对象。
使一个类为immutable,要做到以下几点。
1.不要提供任何可以修改对象中数据的方法。
2.确保此类不会被继承。这个可以防止子类不小心对父类中的数据进行更改。
3.使所有的字段为final.
4.使所有的字段为private.
5.确保所有字段中的可被改变的对象的引用不被外界获得。
但要注意的当实现序列化的时候,如果一个不可改变类中包含可改变类的引用,就必须提供一个显式的readObject或readResolve,或使用ObjectOutputStream.writeUnshared和OjbectInputStream.readUnshared方法。否则就攻击者就可能创建一个可以改变的实例。
总结:除非有足够的理由,应该将类设计为immutable。
         如果一个类不能设计成immutable,那么尽量减少可改变的字段。


相关文档:

Java Web 第四天 使用Servlet处理请求

一、
GET

POST
的区别
1.GET
提交的是文本内容,规定其数据长度不超过
255
个字符。在
GET
方式提交的
URL
中会显示出提交的查询数据而却提交数据的缓存会在浏览器的
URL
历史状态中,这样我们往往在浏览网页的时候点击后退键不需要重新发送请求。
2.POST
提交的可以使文本内容,也可以使二进制内容,所 ......

java 中的 for foreach while循环的比较

java for foreach while循环的比较
关键字: java
在java中究竟是一般的for循环,还是for的增强型foreach,或是while的执行效率比较快呢,我用了一个简单的程序来分析3种循环
public static void main(String[] args) {
 
List<Integer> map = new ArrayList<Integer>();
for (int i = 0; i < ......

Java高手速成 丢失的记忆

          Java编程,能够高手速成吗?我觉的是可以的。Java的知识点比较多,或者说,非常多;但仔细梳理一遍,我们会发现一些规律。通过这些规律可以分析,哪些Java知识是需要深入挖掘的,哪些是可以浅尝辄止的。
       《Java编程思想》, ......

java拷贝对象

这是我个人的理解,加上以前看的一些帖子,有不对的地方,请高人指点。
1.作为java参数传递给一个函数的对象,除了很简单的如int或者boolean等简单的以外,传递的都是这个对象的引用。
当在接收函数中改变这个对象的时候,原来的对象即被改变。
2.在初始化一个对象的时候,有时候我们希望用一个已经存在的对象来给另外一 ......

java网络原理

今天是新年第一篇文章,先祝各位读者新年快乐,虎虎生威!
从今年开始我会陆续讲解服务器开发各部分的知识和技巧(只是个人见解与相关资料的整合,如有错误还希望各位网友指出)。首先来讲下Java网络,网络技术是Java语言中很重要的一部内容,因为Java的语言产生的核心思想:网络与安全。
而且目前的很多的软件的开发也与 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号