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

Effective Java 学习笔记(3)

在实现singleton模式时,我们有以下几种方法。
1. public static final 字段加上private 的构造函数。
public class Singleton{
            public static final Singleton INSTANCE = new Singleton();
            private Singleton() { ... }
}
这种方法简单,其中的字段让人一目了然就知道这个类是Singleton模式,用final关键字确保这个变量在初始化后就不会再被更改,但要注意的是小心防止少数别有用心的程序使用AccessibleObject.setAccessible来访问私有构造函数,这时可以在私有构造函数中判断当创建第二个实例的时候抛出一个异常。
2. private static final 字段加上private 的构造函数再加上public 静态工厂函数
public class Singleton{
            private static final Singleton INSTANCE = new Singleton();
            private Singleton() { ... }
            public static Singleton getInstance{}{return INSTANCE;}
}
这种方式不用担心性能问题,因为现在的JVM会把绝大多数的静态工厂函数改为内联。此外,这种方法还可以在不改变API的情况下对返回值进行改变,即在以后根据需要是否返回第二个实例,或是每个线程一个实例。
对于以上两种方法在串行化的时候要注意,不能仅仅只加上implements Serializable接口,这样会导致每次反序列化的时候创建一个新对象,这样就不是真正的singleton了,解决这个问题的方法是在声明的时候对每一个final字段加上transient关键字,然后再实现一个readResolve方法。
private Object readResolve() {
           return INSTANCE;
}
对于java 1.5后的版本,实现singleton模式最好的方法是用枚举。
public enum Singleton {
              INSTANCE;
}
这种方法没有上面说的缺点,是最优的方法。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mutsinghua/archive/2010/01/16/5199124.aspx


相关文档:

Java连结数据库内幕

Java.sql包中的 java.sql.Driver, jdbc.sql.Connection等提供给程序开发人员统一的开发接口,数据库提供商提供相应的实现,对程序开发人员来讲只要知道这些接口都有哪些方法就可以了。但我们可以深入一些看看到底这里面都做了那些事, 同时也可以学习其中的编程模式(如Interface模式等)。
  1、 Class.forName(String cl ......

JAVA开源工具大全

Spring Framework  【Java开源 J2EE框架】
Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。 Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的 Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用 ......

java socket通信 TCP UDP

 java socket通信
TCP客户端:
import java.net.*;
import java.io.*;
public class Client {
static Socket server;
public static void main(String[] args) throws Exception {
server = new Socket(InetAddress.getLocalHost(), 23);
BufferedReader in = new BufferedReader(new InputStreamReader ......

Effective Java 学习笔记(9)

通常,有一类问题的产生都是由于没有重载hashCode这个方法. 当你重载equals后,hashCode必须重载,否则在使用HashMap, HashSet, Hashtable的时候,会出错.
对于hashCode有几个原则.
1. 不管什么时候调用hashCode,如果同一个对象与hashCode相关的字段没有修改的话,这个方法的返回值必须相同. 但不必和另一个应用程序中的值相等 ......

从C++干到转型为java是退步,正确与否?

今天在逛论坛的时候看到有人津津乐道:从C++干到转型为java是退步
我不认为是这样,首先应该一个人的兴趣,加上这门语言,这门工作是否符合你
干自己喜欢的语言编码才是最重要的,当然java比较容易点,我也是这样认为的
但是java并不是大家所说的那么容易,当今社会谁不敢说自己会ssh,当是自己问心自己学得有多好,
在 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号