java保证对象在内存中唯一性的实现方法
前言
刚看到这个题目的朋友第一反应肯定是好奇,之后再细细思考下就会发现这个题目眼熟了。
就算是同一个答案,如果提问的方式不同,
往往会对回答造成干扰或者影响,
上学的时候老师也说过差不多的话,
学过设计模式的人看到这个题目之后肯定不会陌生:请描述java中单例设计模式的实现步骤,那估计就能答出来了。
而java中的单例模式,相信只要是你看过一些java视频教程,肯定就能写出来的。
所以我们在平时学习的时候要注意举一反三,掌握其精髓,这样在面试或者工作的时候才能应对自如,久而久之,就成为了大神级别。
解决的问题:保证对象在内存中的唯一性。
平时在开发的时候经常会遇到如下场景:多程序读取一个配置文件时,记录日志时。
如果创建多个对象的话,可能会引发出各种各样的问题,这时,就需要我们保证这个对象在内存中的唯一性
java中的Runtime()方法就是单例设计模式进行设计的。
如何保证对象唯一性呢?
思考:
1,不让其他程序创建该类对象。
2,在本类中创建一个本类对象。
3,对外提供方法,让其他程序获取这个对象。
步骤:
1,因为创建对象都需要构造函数初始化,只要将本类中的构造函数私有化,其他程序就无法再创建该类对象;
2,就在类中创建一个本类的对象;
3,定义一个方法,返回该对象,让其他程序可以通过方法就得到本类对象。这样方便我们进行控制;
代码体现:
1,私有化构造函数;
2,创建私有并静态的本类对象;
3,定义公有并静态的方法,返回该对象。
//饿汉式 class Single{ private Single(){} //私有化构造函数。 private static Single s = new Single(); //创建私有并静态的本类对象。 public static Single getInstance(){ //定义公有并静态的方法,返回该对象。 return s; } }
//懒汉式:延迟加载方式。 class Single2{ private Single2(){} private static Single2 s = null; public static Single2 getInstance(){ if(s==null) s = new Single2(); return s; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
解析Java程序中对象内存的分配和控制的基本方法
一.对象与内存控制的知识点 1.java变量的初始化过程,包括局部变量,成员变量(实例变量和类变量). 2.继承关系中,当使用的对象引用变量编译时类型和运行时类型不同时,访问该对象的属性和方法是有区别的. 3.final修饰符特性. 二.java变量的划分与初始化过程 java程序的变量大体可以分为成员变量和局部变量,成员变量可以分为实例变量(非静态变量)和类变量(静态变量),一般我们遇到的局部变量会在下列几种情况中出现: (1)形参:在方法签名中定义的局部变量,由调用方为其赋值,随着方法结束消
-
浅谈Java内存区域与对象创建过程
一.java内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有的区域则依赖用户线程的启动和结束而建立和销毁.根据<Java虚拟机规范(JavaSE7版)>的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域. 1.程序计数器(线程私有) 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码
-
解析Java的JNI编程中的对象引用与内存泄漏问题
JNI,Java Native Interface,是 native code 的编程接口.JNI 使 Java 代码程序可以与 native code 交互--在 Java 程序中调用 native code:在 native code 中嵌入 Java 虚拟机调用 Java 的代码. JNI 编程在软件开发中运用广泛,其优势可以归结为以下几点: 利用 native code 的平台相关性,在平台相关的编程中彰显优势. 对 native code 的代码重用. native code 底层操作
-
Java按照List内存储的对象的某个字段进行排序的实例
关键点:将List内存储的对象实现Comparable类,重写它的compareTo()方法即可 Bean: package chc; public class StuVo implements Comparable<StuVo>{ private String id; private String name; private Integer age; public StuVo(String id, String name, Integer age) { this.id=id; this.na
-
java保证对象在内存中唯一性的实现方法
前言 刚看到这个题目的朋友第一反应肯定是好奇,之后再细细思考下就会发现这个题目眼熟了. 就算是同一个答案,如果提问的方式不同, 往往会对回答造成干扰或者影响, 上学的时候老师也说过差不多的话, 学过设计模式的人看到这个题目之后肯定不会陌生:请描述java中单例设计模式的实现步骤,那估计就能答出来了. 而java中的单例模式,相信只要是你看过一些java视频教程,肯定就能写出来的. 所以我们在平时学习的时候要注意举一反三,掌握其精髓,这样在面试或者工作的时候才能应对自如,久而久之,就成为了大神级别
-
Java对象在内存中的布局是如何实现的?
1.-XX:FieldsAllocationStyle 对象在内存中的布局首要相关配置就是FieldsAllocationStyle,这个配置有3个可选值,即0.1.2.当值为2的时候,会经过一些逻辑判断最终转化为0或者1. -XX:FieldsAllocationStyle=0 表示先分配对象,然后再按照double/long.ints.chars/shorts.bytes/booleans的顺序分配其他字段,也就是类中声明的相同宽度的字段总是会被分配在一起,而相同宽度字段的顺序则是它们在cl
-
Java将对象保存到文件中/从文件中读取对象的方法
1.保存对象到文件中 Java语言只能将实现了Serializable接口的类的对象保存到文件中,利用如下方法即可: public static void writeObjectToFile(Object obj) { File file =new File("test.dat"); FileOutputStream out; try { out = new FileOutputStream(file); ObjectOutputStream objOut=new ObjectOutp
-
浅谈java object对象在heap中的结构
对象和其隐藏的秘密 java.lang.Object大家应该都很熟悉了,Object是java中一切对象的鼻祖. 接下来我们来对这个java对象的鼻祖进行一个详细的解剖分析,从而理解JVM的深层次的秘密. 工具当然是使用JOL: @Slf4j public class JolUsage { @Test public void useJol(){ log.info("{}", VM.current().details()); log.info("{}", ClassL
-
php对象在内存中的存在形式分析
本文实例分析了php对象在内存中的存在形式.分享给大家供大家参考.具体分析如下: <?php class Person{ public $name; public $age; } $p1 = new Person(); $p1->name = "小明"; $p1->age=80; $p2=$p1; $p2->age=85; echo $p2->name; echo $p1->age; ?> (1)$p1对应内存地址,假设是0x123,($p1和
-
java反射_改变private中的变量及方法的简单实例
java反射_改变private中的变量及方法的简单实例 class DemoTest{ private String name="123"; public getName(){ system.out.println("public getName " + name); return name; } private getName2(){ system.out.println("private getName2 " + name); return
-
java获取两个数组中不同数据的方法
本文实例讲述了java获取两个数组中不同数据的方法.分享给大家供大家参考.具体实现方法如下: public static <T> List<T> compare(T[] t1, T[] t2) { List<T> list1 = Arrays.asList(t1); List<T> list2 = new ArrayList<T>(); for (T t : t2) { if (!list1.contains(t)) { list2.add(t)
-
java使用Hashtable过滤数组中重复值的方法
本文实例讲述了java使用Hashtable过滤数组中重复值的方法.分享给大家供大家参考,具体如下: package org.eline.core.web.support; import java.util.Hashtable; /***************************** * * @author zdw * */ public class ObjectFilter { public static void main(String[] args) { // String 测试 S
-
Android手机内存中文件的读写方法小结
本文实例总结了Android手机内存中文件的读写方法.分享给大家供大家参考.具体分析如下: 如何对手机内存中的文件数据进行读写呢? Context提供了领个方法来打开该应用程序的数据文件夹中的文件I/O流,具体如下: FileInputStream openFileInput(String name) 打开应用程序的数据文件夹下的name文件对应的数据流 FileOutputSream openFileOutput(String name, int mode) 打开应用程序数据文件夹下的name
-
C#查找对象在ArrayList中出现位置的方法
本文实例讲述了C#查找对象在ArrayList中出现位置的方法.分享给大家供大家参考.具体分析如下: 我们可以通过IndexOf方法来查找对象在ArrayList中的位置 ArrayList alcollect = new ArrayList(); // Add individual items to the collection string str = "learn csharp"; alcollect.Add(str); //find position of object Con
随机推荐
- IP和MAC捆绑的破解
- Mybatis使用MySQL模糊查询时输入中文检索不到结果怎么办
- IIS PHP环境Temp文件夹的权限问题引起的网站故障
- 将txt文件名写入文件首行的bat代码(保留源文件)
- Javascript自执行匿名函数(function() { })()的原理浅析
- 比较简单的一个符合web标准的JS调用flash方法
- php查询mysql数据库并将结果保存到数组的方法
- Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
- [J2SE]Java中3DES加密解密调用示例
- mysql的udf编程之非阻塞超时重传
- PHP Try-catch 语句使用技巧
- C#端口转发用法详解
- SQL Server遍历表中记录的2种方法(使用表变量和游标)
- jquery中filter方法用法实例分析
- jquery ajax执行后台方法
- Java编程异常处理最佳实践【推荐】
- C#如何将DataTable导出到Excel解决方案
- PHP实现登陆并抓取微信列表中最新一组微信消息的方法
- Yii2.0中使用js异步删除示例
- Android开发中ViewPager实现多页面切换效果