单例模式

目标

使JVM中最多只有一个该类的实例,以节省内存。缺点:只能建一个该类的实例。

实现

具体实现思路:

1构造方法私有化//故在外面不能new很多次

2对外提供一个公开的静态的类方法,获取类对象//故外面可以得到类

3提供一个当前类类型的静态变量。//方便只new一次

两种实现方式:

1饿汉模式:在未调用方法时就创建了类的实例。

2懒汉模式:在调用方法时才创建类的实例。较优,因为不调用方法就创建了类的实例无用。

相关知识

1静态变量区别于成员变量,在类内可以直接调用(不用有对象this.来调用),静态变量只在类加载时初始化且只初始化一次。

2静态方法区别于成员方法,不用先创建类的实例,可以直接用类名调用。

3如果==两边是普通类型则比较的是值,如果==两边是引用类型,则比较的是内存地址。

4使用测试类进行测试

代码

1饿汉模式

  1. public class Singleton {
  2. static Singleton s=new Singleton();
  3. private Singleton() {};
  4. public static Singleton getSingleton() {
  5. return s;
  6. }
  7. }

2懒汉模式

  1. public class Singleton {
  2. static Singleton s=null;
  3. private Singleton() {};
  4. public static Singleton getSingleton() {
  5. if(s==null) {
  6. s=new Singleton();
  7. }
  8. return s;
  9. }
  10. }

测试类

  1. public class SingleTonTest {
  2. public static void main(String args[]) {
  3. Singleton s1=Singleton.getSingleton();
  4. Singleton s2=Singleton.getSingleton();
  5. System.out.println(s1==s2);
  6. }
  7. }

测试结果

true

[Java笔记]面向对象-单例模式的更多相关文章

  1. effective java笔记之单例模式与序列化

    单例模式:"一个类有且仅有一个实例,并且自行实例化向整个系统提供." 单例模式实现方式有多种,例如懒汉模式(等用到时候再实例化),饿汉模式(类加载时就实例化)等,这里用饿汉模式方法 ...

  2. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  3. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  4. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

  5. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  6. 0013 Java学习笔记-面向对象-static、静态变量、静态方法、静态块、单例类

    static可以修饰哪些成员 成员变量---可以修饰 构造方法---不可以 方法---可以修饰 初始化块---可以修饰 内部类(包括接口.枚举)---可以修饰 总的来说:静态成员不能访问非静态成员 静 ...

  7. 第二十七节:Java基础面向对象-静态,单例模式,继承详情知识点

    前言 Java基础面向对象-静态,单例模式,继承详情知识点.静态-static关键字,static变量,静态代码块,代码块(不加静态),对象创建过程,单例模式,继承. 静态-static关键字 // ...

  8. [Java入门笔记] 面向对象三大特征之:封装

    了解封装 什么是封装? 在Java的面向对象程序设计中,有三大基本特征:封装.继承和多态.首先我们先来看看封装: 在Java的面对对象程序设计中,封装(Encapsulation)是指一种将函数功能实 ...

  9. java笔记之面向对象

    一.面向过程与面向对象的区别 1 面向过程:主要关注点是:实现的具体过程,因果关系[集成显卡的开发思路] * 优点:对于业务逻辑比较简单的程序,可以达到快速开发,前期投入成本较低. * 缺点:采用面向 ...

随机推荐

  1. 小麦成长记-<专业盗图好几年>

    ========================================图片来源朋友圈的朋友~

  2. maven的环境变量配置

    一: 首先下载maven, 下载地址:http://maven.apache.org/download.html 打开这个连接:选择File下面的apache-maven-3.2.1-bin.zip链 ...

  3. 一套海量在线用户的移动端IM架构设计实践分享(含详细图文)(转)

    1.写在前面 1.1.引言 如果在没有太多经验可借鉴的情况下,要设计一套完整可用的移动端IM架构,难度是相当大的.原因在于,IM系统(尤其是移动端IM系统)是多种技术和领域知识的横向应用综合体:网络编 ...

  4. NAT与FULL NAT的区别

    LVS 当前应用主要采用 DR 和 NAT 模式,但这 2 种模式要求 RealServer 和 LVS在同一个 vlan中,导致部署成本过高:TUNNEL 模式虽然可以跨 vlan,但RealSer ...

  5. ref与out

    注意点: ref和out都是按地址传递,使用后都将改变原来参数的数值 方法定义和调用方法都必须显式使用 ref/out 关键字 ref: 作为ref参数传递的变量在方法调用中传递之前必须初始化 out ...

  6. 剑指offer例题——裴波那契数列

    编程题:大家都知道裴波那契数列,现在要求输入一个整数n,请你输出裴波那契数列的第n项(从0开始,第0项为0).n<=39 public class Solution { public int F ...

  7. [PHP]基于角色的访问控制RBAC

    ---------------------------------------------------------------------------------------------------- ...

  8. ARP工作过程、ARP欺骗的原理和现象、如何防范ARP欺骗

      地址解析协议(Address Resolution Protocol,ARP)是在仅知道主机的IP地址时确定其物理地址的一种协议. 下面假设在一个局域网内,主机A要向主机B发送IP数据报. ARP ...

  9. VPS 相关

    1.一键测试 wget http://soft.laozuo.org/tools/cpu-io.shsh cpu-io.sh 2.锐速破解 wget -N --no-check-certificate ...

  10. shell 脚本传参

    在 shell 中我们会见到  $0.$1.$2这样的符号,这是什么意思呢? 简单来说 $0 就是你写的shell脚本本身的名字,$1 是你给你写的shell脚本传的第一个参数,$2 是你给你写的sh ...