当前位置: 首页 > 面试题库 >

用Java编写单例的不同方法

秦建元
2023-03-14
问题内容

用Java编写单例的经典过程是这样的:

public class SingletonObject
{
    private SingletonObject()
    {
    }

    public static SingletonObject getSingletonObject()
    {
      if (ref == null)
          // it's ok, we can call this constructor
          ref = new SingletonObject();
      return ref;
    }

    private static SingletonObject ref;
}

并且如果需要在多线程情况下运行,可以添加synced关键字。

但是我更喜欢这样写:

public class SingletonObject
{
    private SingletonObject()
    {
        // no code req'd
    }

    public static SingletonObject getSingletonObject()
    {
      return ref;
    }

    private static SingletonObject ref = new SingletonObject();
}

我认为这更简洁,但是奇怪的是我没有看到以这种方式编写的任何示例代码,如果以这种方式编写代码,会不会有不好的效果?


问题答案:

您的代码与“示例代码”之间的区别在于,加载类时将实例化您的单例,而在“示例”版本中,直到实际需要时才实例化它。



 类似资料:
  • 我有下面的类,我测试了method1,并模拟了method2和method3。我只测试这样的用例:*如果method2调用是OK,那么==>OK*如果method2抛出NotFoundException,method3返回OK==>OK*如果method2抛出NotFoundException,method3抛出ServiceException==>ServiceException确实抛出了 为了

  • 本文向大家介绍Java用GDAL读写shapefile的方法示例,包括了Java用GDAL读写shapefile的方法示例的使用技巧和注意事项,需要的朋友参考一下 GDAL介绍 GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处

  • 来自java教程 > 与实例的超类相同的包中的子类可以覆盖任何未声明为私有或最终的超类方法。 不同包中的子类只能重写声明为public或protected的非final方法。 但有什么区别?如果一个方法没有声明为private,那么它必须是public还是protected no?

  • 问题内容: 我想知道用Java编写文本文件最简单(最简单)的方法是什么。请保持简单,因为我是初学者:D 我在网上搜索并找到了此代码,但我了解其中的50%。 } 问题答案: 在Java 7及更高版本中,一个使用Files的衬板:

  • 本文向大家介绍编写一个单例(Singleton)类。相关面试题,主要包含被问及编写一个单例(Singleton)类。时的应答技巧和注意事项,需要的朋友参考一下 把构造函数设置为private,设置一个public、static的对象实例 扩展:搜“C# Singleton”,有线程安全的更牛B的实现  

  • 我想在java中以不同的方法写入单个文件。我写了这个 输出就是世界。看起来调用函数test()覆盖了之前编写的内容。