牛客网Java刷题知识点之什么是单例模式?解决了什么问题?饿汉式单例(开发时常用)、懒汉式单例(面试时常用)、单例设计模式的内存图解
不多说,直接上干货!
什么是单例设计模式?
解决的问题:可以保证一个类在内存中的对象唯一性,必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。
如何保证?
1、不允许其他程序用new创建该类的对象
2、在该类中创建一个本类的实例
3、对外提供一个方法让其他程序可以获取该对象
步骤(非常重要)
1、构造方法私有化
2、通过new在本类中创建本类的对象
3、定义一个共有的方法,将创建的对象放回
单例的两种模式
1、饿汉式单例(开发时常用)
2、懒汉式单例(面试时常用)
//饿汉式单例(开发时常用)
class Single {
private int num;
public void setNum(int num){
this.num= num;
}
public int getNum(){
return num;
}
//开始构建饿汉式单例
private static Single s= new Single();//2、在该类中创建一个本类私有静态的实例
private Single(){} //1、构造方法私有化
public static Single getInstance() //3、定义一个共有的方法,将创建的对象放回
{
return s;
}
} //懒汉式单例(面试时常用)//在多线程并发访问的时候有可能保证不了对象的唯一性
class Single2 {
private static Single2 s = null; //2、在该类中创建一个本类私有静态的实例
private Single2(){} //1、构造方法私有化
public static Single2 getInstance() { //3、定义一个共有的方法,将创建的对象放回
if(s==null)
s=new Single2();
return s;
}
} //测试类
class SingleDemo {
public static void main(String args []) {
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();
System.out.println(s1==s2); //打印出true s1.setNum();
s2.setNum();
System.out.println(s1.getNum()); //打印出是10,说明s1和s2是同一个对象
}
}

二、如何保证?
1、不允许其他程序用new创建该类的对象
2、在该类中创建一个本类的实例
3、对外提供一个方法让其他程序可以获取该对象
三、步骤:
1、构造方法私有化
2、通过new在本类中创建本类的对象3、定义一个共有的方法,将创建的对象放回
四、单例的两种模式
1、饿汉式单例(开发时常用)
2、懒汉式单例(面试时常用)
牛客网Java刷题知识点之什么是单例模式?解决了什么问题?饿汉式单例(开发时常用)、懒汉式单例(面试时常用)、单例设计模式的内存图解的更多相关文章
- 牛客网Java刷题知识点之什么是异常、异常处理的原理是什么、为什么要使用异常、异常体系、运行时异常、普通异常、自定义异常、异常链
不多说,直接上干货! 在这个世界不可能存在完美的东西,不管完美的思维有多么缜密,细心,我们都不可能考虑所有的因素,这就是所谓的智者千虑必有一失.同样的道理,计算机的世界也是不完美的,异常情况随时都会发 ...
- 牛客网Java刷题知识点之为什么HashMap和HashSet区别
不多说,直接上干货! HashMap 和 HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的面试,可以说是不完整.而Collection框架的 ...
- 牛客网Java刷题知识点之为什么HashMap不支持线程的同步,不是线程安全的?如何实现HashMap的同步?
不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...
- 牛客网Java刷题知识点之Map的两种取值方式keySet和entrySet、HashMap 、Hashtable、TreeMap、LinkedHashMap、ConcurrentHashMap 、WeakHashMap
不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...
- 牛客网Java刷题知识点之ArrayList 、LinkedList 、Vector 的底层实现和区别
不多说,直接上干货! 这篇我是从整体出发去写的. 牛客网Java刷题知识点之Java 集合框架的构成.集合框架中的迭代器Iterator.集合框架中的集合接口Collection(List和Set). ...
- 牛客网Java刷题知识点之垃圾回收算法过程、哪些内存需要回收、被标记需要清除对象的自我救赎、对象将根据存活的时间被分为:年轻代、年老代(Old Generation)、永久代、垃圾回收器的分类
不多说,直接上干货! 首先,大家要搞清楚,java里的内存是怎么分配的.详细见 牛客网Java刷题知识点之内存的划分(寄存器.本地方法区.方法区.栈内存和堆内存) 哪些内存需要回收 其实,一般是对堆内 ...
- 牛客网Java刷题知识点之HashMap的实现原理、HashMap的存储结构、HashMap在JDK1.6、JDK1.7、JDK1.8之间的差异以及带来的性能影响
不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 ...
- 牛客网Java刷题知识点之UDP协议是否支持HTTP和HTTPS协议?为什么?TCP协议支持吗?
不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 ...
- 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤
福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 Java全栈大联盟 ...
随机推荐
- 【C#】 WebApi 路由机制剖析
C#进阶系列——WebApi 路由机制剖析:你准备好了吗? 转自:https://blog.csdn.net/wulex/article/details/71601478 2017年05月11日 10 ...
- java的一些最最最最基本的东西,纯粹是为了保存
1.方法签名 指的是方法名和参数类型 2.java类初始化数据的方法 构造函数 声明变量时赋值 静态块 3.List转数组 List<String> list = new ArrayLis ...
- VirtualBox 5.0(虚拟机软件)里,安装Fedora遇到的问题!!
问题一: 安装完毕后,重新启动竟然还是进入了Fedora安装过程里. 问题原因:Fedora,并没有处理安装时候加载的ISO文件,依旧让VirtualBox 5.0运行它. 解决方法:在运行Fedor ...
- 数组谓词查询法 NSPredicate
NSPredicate:谓词 字面翻译是这个意思,但是我觉得谓词这个词太难以理解了 NSPredicate的具体用途应该还是过滤,类似于过滤条件之类的,相当于一个主语的谓语,所以说会是谓词这个名字.( ...
- 处理Json接收日期格式问题
//处理Json接收日期格式问题function getNormalDate(dateNormal) { var receiveDate = new Date(parseInt(dateNormal. ...
- NYOJ1238 最小换乘 (dijkstra)
最少换乘 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描述 欧洲某城是一个著名的旅游胜地,每年都有成千上万的人前来观光旅行.Dr. Kong决定利用暑假好好游览一番.. ...
- 取消 windows2008 server 禁ping
windows 2008 server 默认是禁ping的,取消方法如下: 依次打开: 服务器管理器——配置——高级安全windows防火墙——入站规则 找到“文件和打印机共享(回显请求-ICMPv4 ...
- 网络流之最大流与最小费用流入门&&模板
理解处 刷题处 模板处 最大流模板 处理重边的+(优化) #include<bits/stdc++.h> using namespace std; ; const int INF = 0x ...
- newSingleThreadExecutor单任务线程池使用
1.newSingleThreadExecutor单任务线程池, 一次只执行一个任务 package ThreadTest; import java.util.concurrent.Executo ...
- django模型层 关于单表的增删改查
关于ORM MTV或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库, 通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员 ...