Java单例破坏以及防止

article/2025/9/11 14:24:34

单例实现的方式有很多种,如有需要,请查设计模式——单例_程序员Forlan的博客-CSDN博客

下面我们以静态内部类为例

public class Demo{private Demo(){}public static Demo getInstance(){return Inner.demo;}private static class Inner{private static Demo demo = new Demo();}
}

反射破坏单例

原理

反射可以访问私有构造方法,通过反射拿到的构造器,再setAccessible(true),就能够实例化,每调用一次产生一个实例,从而破坏单例

实现

Demo instance = Demo.getInstance();
Constructor<Demo> constructor = Demo.class.getDeclaredConstructor();
constructor.setAccessible(true);
Demo demo = constructor.newInstance();
System.out.println(instance == demo); // 结果为false

防范

private Demo(){if(Inner.demo != null){throw new RuntimeException("非法操作");}
}

直接抛出异常Caused by: java.lang.RuntimeException: 非法操作

序列化破坏单例

实现

// class implement Serializable,才能序列化
try(ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("G:\\temp.txt"));ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(("G:\\temp.txt")));){Demo instance = Demo.getInstance();outputStream.writeObject(Demo.getInstance());Demo demo = (Demo) inputStream.readObject();System.out.println(instance == demo); // 结果为false
} catch (Exception e){e.printStackTrace();
}

防范

定义readResolve方法,反序列化时则直接返回此方法指定的对象,而不需要单独再创建对象

private Object readResolve() {return Inner.demo;
}

最安全的方法

public enum Demo {INSTANCE;
}

通过源码可以发现,枚举默认就是单例的,不能进行实例化


http://chatgpt.dhexx.cn/article/3v8hAtCK.shtml

相关文章

Java单例模式读取MySql配置文件

单例的数据库连接类&#xff1a; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.FileInputStream; import java.sql.Connection; import java.util.Properties;public class Singleton {// 创建单例对象private static…

java单例模式--Java单例模式以及6种实现方式

文章目录 前言一、单例模式的定义二、单例模式特点三、实现单例模式的八种方式及优缺点总结 前言 今天老师考到了单例模式&#xff0c;我对这个知识点掌握的不是很好&#xff0c;所以总结此文来使自己深入了解Java中的单例模式~~同时也借鉴给和我一样不懂的友友们~~~ 一、单例…

java单例模式使用_Java单例模式的应用

单例模式用于保证在程序的运行期间某个类有且仅有一个实例。其优势在于尽可能解决系统资源。通过修改构造方法的访问权限就可以实现单例模式。 代码如下&#xff1a; public class Emperor { private static Emperor emperor null;// 声明一个Emperor类的引用 private Emperor…

创建型:Java单例模式

一.单例模式的定义&#xff1a; 单例模式确保某个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供这个实例。在计算机系统中&#xff0c;线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台…

java 单例模式 参数_Java单例模式

再孬再好&#xff0c;就你一个 单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类&#xff0c;该类负责创建自己的对象&#xff0c;同时确保只…

java单例接口_JAVA单例模式

一.问题引入 偶然想想到的如果把Java的构造方法弄成private,那里面的成员属性是不是只有通过static来访问呢;如果构造方法是private的话,那么有什么好处呢;如果构造方法是private的话,会不更好的封装该内呢?我主要是应用在使用普通类模拟枚举类型里,后来发现这就是传说中…

java单例模式——详解JAVA单例模式及8种实现方式

本文转载自&#xff1a;java单例模式——详解JAVA单例模式及8种实现方式_EatingSoilLang的博客-CSDN博客_java单例模式 ## 单例模式是最简单也是最基础的设计模式之一&#xff0c;下边一起学习一下单例模式&#xff01; 一.单例模式的定义&#xff1a; 单例模式确保某个类只有…

JAVA设计模式之单例模式

本文继续介绍23种设计模式系列之单例模式。 概念&#xff1a;   java中单例模式是一种常见的设计模式&#xff0c;单例模式的写法有好几种&#xff0c;这里主要介绍三种&#xff1a;懒汉式单例、饿汉式单例、登记式单例。   单例模式有以下特点&#xff1a;   1、单例类…

Java多线程(七):单例模式详解

目录 1. 什么是单例模式 2. 单例模式的特点 3. 单例模式的实现 3.1 单例模式实现步骤 3.2 单例模式实现方式 3.2.1 饿汉方式 3.2.2 懒汉方式 1. 什么是单例模式 java中单例模式是一种常见的设计模式&#xff0c;单例模式确保某个类只有一个实例&#xff0c;而且自行实例…

ARFoundation之路-3D物体识别之一

版权声明&#xff1a;Davidwang原创文章&#xff0c;严禁用于任何商业途径&#xff0c;授权后方可转载。 3D物体跟踪技术&#xff0c;是指通过图像处理技术对摄像头中拍摄到的3D物体识别定位并对其姿态进行跟踪的技术。3D物体跟踪技术的基础也是图像识别&#xff0c;但比前述图…

ARFoundation系列讲解 - 57 3D物体识别一

一、介绍 目前在ARFoundation中,3D物体识别只支持A9处理器或更高版本的iOS设备,系统版本要求iOS 12或更高版本,Android不支持此功能 。使用3D物体识别跟踪功能需要预先采集3D物体特征点信息。苹果公司给我们提供了一个采集3D物体特征点工具,我们需要下载并使用Xcode编译成应…

实战三:手把手教你实现物体识别

实战三&#xff1a;手把手教你实现物体识别 一、基于HaadAdaboost实现人脸识别 1.原理介绍&#xff08;参考下面的博客文章&#xff09; http://www.cnblogs.com/ello/archive/2012/04/28/2475419.html Haar分类器 Haar-like特征积分图方法AdaBoost级联 Haar分类器算法的…

手把手教你使用LabVIEW OpenCV dnn实现物体识别(Object Detection)含源码

文章目录 前言一、物体识别算法原理概述1、物体识别的概念2、Yolo算法原理概述 二、opencv调用darknet物体识别模型&#xff08;yolov3/yolov4&#xff09;1、darknet模型的获取2、python调用darknet模型实现物体识别3、LabVIEW调用darknet模型实现物体识别yolo_example.vi4、L…

颜色和移动物体识别系统

颜色和移动物体识别系统 1.开发工具 Python版本&#xff1a;Anaconda 的python环境3.8版本 开发软件&#xff1a;Pycharm社区版 识别模型&#xff1a;深度学习模型&#xff0c;普通学习模型 相关模块&#xff1a;opencv-python3.4.8.29模块 2.环境搭建 安装Anaconda并将路径添加…

[Vuforia]二.3D物体识别

之前说过10之后的版本没有3dScan了&#xff0c;所以还是9.8的版本或者之前更早的版本。 3d物体扫描需要先下载扫描的APK进行扫面。 首先要在手机上装一个扫描程序&#xff0c;扫描现实中的三维物体&#xff0c;然后上传高通官网&#xff0c;在下载成UnityPackage类型让Unity能…

K210视觉体验—物体识别

K210视觉体验—物体识别 使用设备ZTFR开发板 人脸识别构造函数导入模型 示例代码基础测试 使用设备 ZTFR开发板 人脸识别 首先简单介绍一下 K210 的 KPU。KPU 是 K210 内部一个神经网络处理器&#xff0c;简单来说就是 KPU 能加载和运行各种现成的 AI 算法模型&#xff0c;实现…

tensorflow 物体识别

tensorflow推出的object detection模块&#xff0c;为我们做物体检测提供了极大的便利&#xff0c;如果还没有安装该模块&#xff0c;可以参照 http://blog.csdn.net/hanshuobest/article/details/79222685 下面的示例演示如何用已训练的模型做物体检测 import numpy as np …

计算机视觉物体识别的过程,计算机视觉之从OpenCV到物体识别(二)

前言:上一章节我们学会了图片、视频以及外设获取帧图片的方式,以及OpenCV 的灰度图片处理。计算机不像人眼可以很轻易地辨别物体,本质是将一张图片转换成灰度图,通过一定的模型训练,使得机器能够从0,1(黑与白)中分辨物体的特征,由局部到整体,图片越复杂,所需的训练程度…

unity c# 触摸屏物体识别桌算法

unity源码地址链接&#xff1a;unityc#触摸屏物体识别桌算法-C#文档类资源-CSDN下载 实操的时候出现算出来的坐标不对&#xff0c;没有时间去找问题&#xff0c;优化了&#xff0c;所以代码仅供参考。 使用的是Lean Touch插件&#xff0c;免费的。 模块由三个点构成&#xf…

如何用AR引擎技术, 5步优雅实现物体识别和跟踪

AR技术让应用实现虚拟世界和现实世界的融合&#xff0c;让开发者的创意和脑洞能够拥有更多炫酷有趣的呈现方式。AR拍照、AR购物、AR教育、AR搜索等丰富应用场景&#xff0c;凭借着AR技术的加持&#xff0c;为用户带来更优质的沉浸式体验&#xff0c;为用户创造更多价值。 例如…