如何确保JVM中类只有一个实例?

2024-02-03

我正在开发一种设计模式,我想确保这里只是Java虚拟机中类的一个实例,通过一个点汇集对某些资源的所有请求,但我不知道这是否可能。

我只能想出一种方法来计算类的实例并在创建第一个实例后销毁所有实例。

这是正确的做法吗?如果没有的话还有其他办法吗?


Use the 单例图案。最简单的实现包括private constructor and a field保存其结果,并且static名称类似于的访问器方法getInstance().

私有字段可以从静态初始值设定项块内分配,或者更简单地使用初始值设定项。这getInstance()方法(必须是公共的)然后简单地返回这个实例,

public class Singleton {
    private static Singleton instance;

    /**
     * A private Constructor prevents any other class from
     * instantiating.
     */
    private Singleton() {
        // nothing to do this time
    }

    /**
     * The Static initializer constructs the instance at class
     * loading time; this is to simulate a more involved
     * construction process (it it were really simple, you'd just
     * use an initializer)
     */
    static {
        instance = new Singleton();
    }

    /** Static 'instance' method */
    public static Singleton getInstance() {
        return instance;
    }

    // other methods protected by singleton-ness would be here...
    /** A simple demo method */
    public String demoMethod() {
        return "demo";
    }
}

请注意,使用“惰性求值”的方法getInstance()方法(其中 设计模式中提倡的),在Java中没有必要,因为Java已经使用了“lazy 加载中。”你的单例类可能不会被加载,除非它getInstance()被调用,因此尝试将单例构造推迟到需要时是没有意义的 有了getInstance()测试单例变量null并创建单例 那里。

使用此类同样简单:只需获取并保留引用,然后调用其上的方法:

public class SingletonDemo {
    public static void main(String[] args) {
        Singleton tmp = Singleton.getInstance();
        tmp.demoMethod();
    }
}

一些评论员认为,单例也应该提供公开的最终结果clone()仅抛出异常的方法,以避免子类“作弊”和clone()单身人士。然而,很明显,只有一个私有构造函数的类 不能被细分,所以这种偏执似乎没有必要。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确保JVM中类只有一个实例? 的相关文章

  • Selector.close() 是否关闭所有客户端套接字?

    我是 nio 套接字的新手 我已经使用 nio 套接字编写了一个服务器 现在我正在尝试编写关闭钩子以确保通过清理资源正常退出 我的问题是Selector close 方法关闭所有客户端套接字 如果没有 请告诉我如何访问所有客户端套接字 而无
  • 如何重复一段文本中的每个字母?爪哇语

    就像在口吃中一样 如果文本为 dean 并且乘数为 3 则结果将是 dddeeeaaannn 由提供的乘数指定的次数 public static void repeatLetters String text dean int n 3 Str
  • JAX-WS 入门 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有人可以推荐一些关于 JAX WS 入门的好教程吗 使用各种工具 如 wsgen 等 您可以从这里开始 通过 Java SE 6 平台介绍
  • java中高效的输入流到字符串方法

    因此 我在 Java 中的 诚然非常简单 应用程序上运行探查器 令我惊讶的是 仅次于需要在时间上发出 HTTP 请求的方法的是我的方法 inputStreamToString方法 目前它的定义如下 public static String
  • Android Studio 与 Google Play 服务的编译问题

    我正在运行 Android Studio 0 8 4 并在 Android Studio 0 8 2 上尝试过此操作 我正在运行 Java JDK 1 8 0 11 并尝试使用 JDK 1 8 0 05 每当我尝试构建我的 android
  • 用于制作代码编辑器的 JavaFX 相当于 JSyntaxPane 的什么?

    以前在 Swing 中 我使用过JSyntaxPane用于制作一个小型 Java 源代码编辑器 为了练习 我决定用 JavaFX 重做整个项目并添加对更多语言的支持 最好是尽可能多 不过好像没有什么类似的JSyntaxPane 一些研究让我
  • 使用正则表达式验证电子邮件的最大长度

    我找到了用于电子邮件验证的正则表达式 a z0 9 a z0 9 a z0 9 a z0 9 a z 2 4 我希望电子邮件的最大长度为 20 个字符 因此我将其更改为 a z0 9 a z0 9 a z0 9 a z0 9 a z 2 4
  • 如何使用 aether 从 Java 找到最新版本的 Maven 工件?

    他们的文档非常薄弱 我无法弄清楚 我找到了部分答案here https stackoverflow com questions 27428068 how to retrieve the latest also snapshot versio
  • 如何检查单词是否在wordNet中

    我开始了解wordNet直到我知道我找到了synonymous对于一个特定的词 现在我有一个文件 我想使用标记化该文本n gram例如 String s I like to wear tee shirt 使用后n gram这将是 I lik
  • 在 Eclipse 中删除空块之前的新行

    我更喜欢奥尔曼式 http en wikipedia org wiki Brace style Allman style大括号 例如 if foo magical prancing unicorn stuff 而不是 if foo unma
  • 生成一定长度的所有排列

    假设我们有一个字母表 abcdefghiklimnop 如何以有效的方式以五个一组的形式重复该字母表来递归生成排列 几天来我一直在为此苦苦挣扎 任何反馈都会有帮助 本质上这与 生成给定字符串的所有排列 https stackoverflow
  • JFrame 在连续运行代码时冻结

    我在使用时遇到问题JFrame 它会冻结 连续运行代码 下面是我的代码 点击时btnRun 我调用了该函数MainLoop ActionListener btnRun Click new ActionListener Override pu
  • 为休息服务实施 JUnit 测试

    我必须为我的休息服务实现一些 JUnit 测试 例如 这是我的休息服务之一 Path dni fe public class HelloWorld POST Path home Consumes MediaType APPLICATION
  • Java 8:如何创建毫秒、微秒或纳秒的 DateTimeFormatter?

    我需要创建格式化程序来解析具有可选的毫秒 微米或纳秒分数的时间戳 例如 对于我的需求 我看到以下机会 DateTimeFormatter formatter new DateTimeFormatterBuilder append DateT
  • 在 Tensorflow-lite Android 中将位图转换为 ByteBuffer(浮点)

    在用于图像分类的tensorflow lite android演示代码中 图像首先转换为ByteBuffer格式以获得更好的性能 这种从位图到浮点格式的转换以及随后到字节缓冲区的转换似乎是一个昂贵的操作 循环 按位运算符 float mem
  • Kotlin 支持 Java 11 吗?

    我尝试使用 Kotlin V1 2 70 Gradle V4 10 1 和 Java 11 使用 gradle 编译项目时 出现错误 未知 JVM 目标版本 11 支持的版本 1 6 1 8 Kotlin 编译器是否支持 Java 11 生
  • 用于生成 ISO 文件的 Maven 插件

    有没有可以生成ISO镜像的maven插件 我需要获取一些模块的输出 主要是包含 jar 的 zip 文件 并将它们组合成一个 ISO 映像 Thanks 现在有一个 ISO9660 maven 插件可以完成这项工作 https github
  • junit4 使用特定测试方法创建测试套件

    在 junit4 中 我想执行来自不同类的特定测试方法 即想要使用来自不同类的特定测试方法创建一个测试套件 假设我有两门课 public class Test Login Test public void test Login 001 Sy
  • 亚马逊 Linux - 安装 openjdk-debuginfo?

    我试图使用jstack在 ec2 实例上amazon linux 所以我安装了openjdk devel包裹 sudo yum install java 1 7 0 openjdk devel x86 64 但是 jstack 引发了异常j
  • Graphics2D setfont() 严重减慢了 java 应用程序的启动速度

    我正在用java制作一个游戏 它每秒刷新60次 每次执行循环时 我都会使用 g2d 来绘制图像和字符串 如果我这样做的话一切都会很好g2d setFont new Font Arial Font PLAIN 8 和抽绳 这将是正常的 但如果

随机推荐

  • 如何编译适用于 Windows 的 Prometheus UI 静态二进制文件?

    我在尝试着从 Windows 上的 Grafana 访问 GCP 托管 Prometheus 指标 https stackoverflow com q 74563137 20592222 为此我需要为 Prometheus UI 前端编译一
  • 为高度倾斜的数据生成直方图

    我在用着dc js crossfilter js and d3 js生成条形图 条形图表示信用卡交易的数据 它绘制了交易数量 y 轴 与交易金额 x 轴 的关系 它看起来像这样 数据数组基本上如下所示 txn id 1 txn amount
  • WMI 与 Windows API

    使用该方法有任何优点或缺点WMI http msdn microsoft com en us library aa394582 28VS 85 29 aspx代替视窗应用程序接口 http msdn microsoft com en us
  • GitHub Enterprise 中的 GitHub 操作在 npm 包上提供 401 和 404

    我在用语义版本动作 https github com cycjimmy semantic release action在我的 GitHub 企业存储库上 直到最近它工作得很好 但开始失败这个错误 https github com cycji
  • 在 Typescript 中使用接口或类时[重复]

    这个问题在这里已经有答案了 我有一个简单的登录场景 需要用户在 Typescript 中输入电子邮件和密码 我需要创建某种类型来获取强类型并将其发送到后端 是否应该写成 export interface UserLogin email st
  • 将 git 存储库链接到多个 TFS 项目

    我有一个 git 存储库 需要作为共享库 通用代码在多个其他项目之间共享 使用此通用代码的项目都是TFS项目 TFS2013 我能够在 TFS 中托管 git 存储库 但无法弄清楚如何在不重复的情况下将 git 和 TFS 存储库链接在一起
  • 在 OS X 下的 PyCharm 上运行 GAE GCS,运行时错误“没有名为 cloudstorage 的模块”

    我正在尝试将 Google Cloud Storage 功能添加到已经运行且具有重要功能的 Python GAE 应用程序中 我的开发计算机完全在 PyCharm 中工作 该计算机是运行 OS X 10 9 5 的 Mac 我创建了一个新的
  • php foreach echo 打印“Array”作为值

    也许我只是无法理解 php 如何处理数组 我正在尝试使用 foreach 循环打印出一个数组 我能从中得到的似乎只有 数组 这个词 br 这会打印出以下内容 Array 我无法理解为什么会出现这种情况 如果我像上面一样预先定义一个数组 它将
  • Django:“unicode”对象没有属性“tzinfo”。仅生产服务器

    我很困惑 通过我的本地设置 python manage py runserver 一切运行正常 通过我的生产设置 wsgiserver CherryPyWSGIServer 我得到 unicode object has no attribu
  • GoogleCloudMessaging - InstanceID.getInstance(),从客户端注册

    我对 Java 编程和一般编程还很陌生 现在我决定制作自己的应用程序 该应用程序应该利用 Google Cloud Messaging 不知怎的 我成功了 但后来我意识到我使用了方法 String regid gcm register PR
  • 如何修复此分类报告警告?

    我创建了一个多类分类模型 一切都很顺利 验证准确度为 84 但当我打印分类报告时 我收到了此警告 UndefinedMetricWarning Precision and F score are ill defined and being
  • 检测 Android 上的 USB 网络共享

    有没有什么方法可以 以编程方式 在您的活动 应用程序中知道用户已在其手机上启用 USB 网络共享 您还可以使用反射来访问用于设置 USB 网络共享的隐藏功能 这是我的代码 ConnectivityManager cm Connectivit
  • Mutate_if 语法帮助 - 如何在谓词条件下添加函数参数

    寻找一些有关如何使用 dplyr 的 mutate if 语句来检查是否需要将列转换为因子变量的建议 这个函数说明了我正在尝试做的事情 问题是 当我想为函数中的 max value 参数传递一些内容时 正确的语法是什么 不起作用 我尝试更改
  • Android - 无法动态重新创建 Canvas 视图

    我试图显示在上一个屏幕中绘制的画布图像的网格视图 我有一组在第一个屏幕中绘制的不同视图 这些视图会发生变化 这些画布将根据用户的操作重新绘制 我有 5 个心形画布视图 并且我对每颗心使用不同的视图 这意味着我没有使用同一类来绘制五颗心 而是
  • Java中多项式乘以常量

    我在将多项式乘以常数 双精度 时遇到一些问题 当只有一个系数时它会起作用 但当存在多个系数时 它会给出 ArrayIndexOutOfBounds 错误并指向 setCoefficient 方法 有什么帮助吗 谢谢 public class
  • SwiftUI:呈现工作表时防止视图刷新

    我注意到添加时 SwiftUI 完全刷新了视图sheet修饰符 假设我有显示随机数的视图 我希望这个值是独立的 并且不与工作表逻辑相关 每次打开 关闭工作表时不会改变 但是每次提交 取消表格时文本都会发生变化 它应该这样工作吗 我的要点是错
  • 查询至少有 1 个关联,但返回全部

    我创建了这条记录 您可以看到它有 2 个标签 tag1 和 tag2 id d87de1d9 b048 4867 92fb a84dca59c87e name Test Name tags id fa0ca8fd eff4 4e58 8bb
  • 如何获取泛型类型参数?

    Simply public static class MyClass
  • 在 XCode 中启用代码视图的抗锯齿功能

    有没有办法让 XCode 在启用抗锯齿的情况下在编辑器中渲染文本 我在首选项对话框中看不到任何可以做到这一点的内容 XCode 文本已经是抗锯齿的 检查并确保字体大小大于以下指定的大小 系统偏好设置 gt 外观 如果大于 您可以在命令行中尝
  • 如何确保JVM中类只有一个实例?

    我正在开发一种设计模式 我想确保这里只是Java虚拟机中类的一个实例 通过一个点汇集对某些资源的所有请求 但我不知道这是否可能 我只能想出一种方法来计算类的实例并在创建第一个实例后销毁所有实例 这是正确的做法吗 如果没有的话还有其他办法吗