java 核心学习笔记(四) 单例类

如果一个类始终只能创建一个实例,那么这个类被称作单例类。

一些特殊的应用场景可能会用到,为了保证只能创建一个实例,需要将构造方法用private修饰,不允许在类之外的其它地方创建类的实例。

又要保证可以创建该类的实例,所以需要一个public方法来创建该类的实例,由于在创建之前并没有该类的对象存在,所以只能使用类来调用此方法,故用static修饰。

同时需要将该类创建得到的实例分配一个引用才能知道该实例是否存在与是否唯一,所以需要一个成员变量保存创建的对象,同时由于该对象由上述静态方法创建,则该成员变量也必须是成员变量,与静态方法一起在类装载时初始化。

所以代码应该这样写;

import com.sun.tools.xjc.reader.xmlschema.bindinfo.BIConversion;

public class SingletonTest {
    public static void main(String[] args){
        String str = new String();
        System.out.println();
        if(str == null){
            System.out.println("str == null");
        }
        else if(str.equals("")){
            System.out.println("str.equal(‘‘)");
        }
        else{
            System.out.println(str);
        }

        Singleton singleton = Singleton.getTheSingleton();
        Singleton singleton1 = Singleton.getTheSingleton();
        System.out.println(singleton == singleton1);
    }

}

class Singleton{
    private static  Singleton singleton;
    private Singleton(){};
    public static Singleton getTheSingleton(){
        //如果该静态对象还没初始化(对象的创建包含声明和初始化),就创建一个。
        if(singleton == null) singleton = new Singleton();
        return singleton;
    }
}
时间: 2024-08-05 07:09:28

java 核心学习笔记(四) 单例类的相关文章

黑马程序员--Java基础学习笔记【单例设计模式、网络编程、反射】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 设计模式分类: 创建模式:是对类的实例化过程的抽象化,又分为类创建模式和对象创建模式 类创建模式:工厂方法模式 对象-:简单工厂(静态工厂方法)模式.抽象工厂模式.单例模式.建造模式- 结构模式:描述如何将类或者对象结合在一起形成更大的结构 适配器模式.缺省模式.合成模式.装饰模式(包装模式).门面模式- 行为模式:对不同的对象之间划分责任和算法的抽象化 不变模式.策略模式.迭代子模式.命令模

【学习笔记】单例设计模式笔记

单例设计模式是常见的设计模式之一.通过单例实现所需求类在系统中只存在唯一一个实例. 单例设计模式分两种:懒汉单例设计模式和饿汉单例设计模式,两者设计思路一致,实现有微小不同. 实现代码: 1 public class HungryMan { 2 3 private HungryMan(){};//私有的构造方法保证HungryMan类无法在外部使用构造方法实例化 4 private static final HungryMan hungryMan=new HungryMan();//在类内定义一

java核心学习笔记(一) javaJDK目录阐述

本系列博客为原创博客,旨在学习整理之用,转载请注明出处,谢谢. java作为最成功的语言之一,有很多地方可以学习,不仅仅是语言的用法. 本次学习目标在于系统的从javaSE学起,学习java的理念思想,以及从代码层次直接学习javaSE和他的用法,以此来为将来学习java类库的编写.java开发框架以及javaEE.java虚拟机.javaWEB打下良好的基础,努力让编程成为一种思想,成为身体的一部分. 这次从头重新对java的学习,目的是要学习java的世界观和方法论,学习过程要符合哲学理论,

Java基础学习笔记四 Java基础语法

数组 数组的需求 现在需要统计某公司员工的工资情况,例如计算平均工资.最高工资等.假设该公司有50名员工,用前面所学的知识完成,那么程序首先需要声明50个变量来分别记住每位员工的工资,这样做会显得很麻烦. 数组的概述 数组是指一组数据的集合,数组中的每个数据被称作元素.在数组中可以存放任意类型的元素,但同一个数组里存放的元素类型必须一致. 数组的定义 格式: 数据类型[] 数组名 = new 数据类型[元素个数或数组长度]; 举例:int[] x = new int[100]; 要点说明 数据类

Java泛型学习笔记 - (四)有界类型参数

1. 当我们希望对泛型的类型参数的类型进行限制的时候(好拗口), 我们就应该使用有界类型参数(Bounded Type Parameters). 有界类型参数使用extends关键字后面接上边界类型来表示, 注意: 这里虽然用的是extends关键字, 却不仅限于继承了父类E的子类, 也可以代指显现了接口E的类. 仍以Box类为例: 1 public class Box<T> { 2 3 private T obj; 4 5 public Box() {} 6 7 public T getOb

Android(java)学习笔记140:SpannableString类的使用

我们之前说过了我们想实现在TextView组件之中,可以显示URL.Email等特殊信息,这些信息点击可以实现跳转,真正意义上的超链接 要实现上面的需求就要SpannableString这个类. 因为Spannable等最终都实现了CharSequence接口,所以可以直接把SpannableString和SpannableStringBuilder通过TextView.setText()设置给TextView. SpannableString:特殊就在于有一个SetSpan()函数,能给这些存

Android(java)学习笔记97:Scanner类使用

1 package cn.itcast_01; 2 3 /* 4 * Scanner:用于接收键盘录入数据. 5 * 6 * 前面的时候: 7 * A:导包 8 * B:创建对象 9 * C:调用方法 10 * 11 * System类下有一个静态的字段: 12 * public static final InputStream in; 标准的输入流,对应着键盘录入. 13 * 14 * InputStream is = System.in; 15 * 16 * class Demo { 17

《Thinking in Java》学习笔记(四)

1.Java中的闭包与回调 通过内部类提供闭包的功能是优良的解决方案,比指针更为灵活.安全. 回调的价值在于它的灵活性—它可以动态地决定需要调用什么方法,在Swing中,回调被大量使用. 2.容器类 Java容器类的用途是用来保存对象,可以分为以下的两个大类: 1>Collection,一个用于存储对象的序列.又可以具体的分为List,Set和Queue. 2>Map,一个以键值对来存储对象的序列. Arrays和Collections类中提供了很多实用的静态方法. 1.创建一个空的colle

Android(java)学习笔记84:自定义异常类

自定义异常: 考试成绩必须在0-100之间 很明显java没有对应的异常,需要我们自己来做一个异常 自定义异常 继承自Exception 继承自RuntimeException 下面是一个代码示例: package cn.itcast_08; /* * java不可能对所有的情况都考虑到,所以,在实际的开发中,我们可能需要自己定义异常. * 而我们自己随意的写一个类,是不能作为异常类来看的,要想你的类是一个异常类,就必须继承自Exception或者RuntimeException * * 两种方