易截截图软件、单文件、免安装、纯绿色、仅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 Web 第五天 Web状态管理

一、
为什么要
Web
状态管理
对于每个容器而言每个请求都相当于一个新的客户,因为当服务器生成
Response
返回到客户端,在客户端显示出来后相对应的
Socket
就会关闭,所以
HTTP
协议是个无状态的协议,他不能保存当前用户的信息。
二、
实现状态管理的方式
1.      

在网 ......

Java Web 第六天 作用域及监听器

一、
web
的三种作用域
ServletContext(
上下文
)
:整个
web
应用程序,线程不安全
HttpSession(
会话
)
:一个会话交互过程
ServletRequest(
请求
)
:一次请求过程
属性操作方法:
      

void setAttribute(String,Object)
       ......

Java类加载内幕

  类加载是java语言提供的最强大的机制之一。尽管类加载并不是讨论的热点话题,但所有的编程人员都应该了解其工作机制,明白怎么做才能让其满足我们的需要。这能有效节省我们的编码时间,从不断调试ClassNotFoundException, ClassCastException的工作中解脱出来。
  这篇文章从基础讲起,比如代码和数据的不同之处是什 ......

java网络原理

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