Java中static的应用之单例模式

这篇具有很好参考价值的文章主要介绍了Java中static的应用之单例模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

单例模式是一种创建对象的设计模式,它保证一个类只有一个实例,并提供一个全局访问点。由于单例模式只允许存在一个实例,因此它可以节省系统资源并提高程序的性能。在许多情况下,单例模式在应用程序中都是非常有用的,例如数据库连接、日志记录、配置文件等。

单例模式分为饿汉式和懒汉式

1.饿汉式

        步骤:

                (1)构造器私有化,防止其他类中直接new该类的对象

                (2)在该类的内部创建一个static对象

                (3)向外暴露一个静态的公共方法,返回的是对象

代码:

public class Hungry {
    public static void main(String[] args) {
        //new A();//不能直接new,因为构造器被私有化了
        A a1 = A.getInstance();
        A a2 = A.getInstance();
        System.out.println(a1 == a2);//true,说明a1和a2是同一个对象
    }
}

class A{
    private A() {//构造器私有化,防止其他类中直接new该类的对象
    }
    private static A a = new A();//因为静态方法getInstance中只能调用静态成员,因此这里也要static
    public static A getInstance(){//这边这能是static,因为构造器被私有化了,不能通过该类的对象来访问此方法了,就只能通过类来直接访问了,故必须为static的
        return a;
    }
}

饿汉式之所以被称为“饿汉式”,主要是因为这种方式会在程序启动时就创建对象实例,无论是否需要它,就像是“饿汉一样”,比较着急。在程序运行期间,无论这个单例对象是否会被使用,都会提前创建好,因此会占用一定的系统资源。

这种方式的优点是实现简单、线程安全,不需要进行多线程同步处理,能够保证对象实例的唯一性。缺点是可能会浪费系统资源,如果该对象实例很少被使用,会对系统性能产生一定的影响。

2.懒汉式

        步骤:

                (1)构造器私有化,防止其他类中直接new该类的对象

                (2)在该类的内部定义一个static属性对象,此时并不创建对象

                (3)向外暴露一个静态的公共方法,返回的是对象,但只有当用户首次调用该方法时才会创建一个对象,往后的调用是返回之前的对象

代码:

public class Lazy {
    public static void main(String[] args) {
        B b1 = B.getInstance();
        B b2 = B.getInstance();
        System.out.println(b1 == b2);//true,说明b1和b2是同一个对象
    }
}

class B {
    private B() {构造器私有化,防止其他类中直接new该类的对象
    }

    private static B b;

    public static B getInstance() {
        if (b == null) {//如果为null就创建一个对象
            b = new B();
        }
        return b;
    }
}

懒汉式之所以被称为“懒汉式”,主要是因为在第一次使用该单例对象时才会进行实例化,比较“慢”,就像是“懒汉一样”,不太着急

这种方式的优点是在程序启动时不会占用系统资源,只有在需要使用时才会进行实例化,能够延迟对象的创建时间,提高系统性能。缺点是需要进行多线程同步处理,否则会出现线程安全问题

小结:饿汉式于懒汉式的区别与联系:

区别:

  1. 初始化时机:饿汉式在类加载时就创建实例对象,而懒汉式在第一次使用时才创建实例对象。
  2. 线程安全性:饿汉式是线程安全的,因为实例对象在类加载时就创建,不存在多线程竞争的情况。懒汉式在多线程环境下需要考虑线程安全性,可以使用synchronized关键字或者双重检查锁定等方式来保证线程安全。
  3. 性能:饿汉式在类加载时就创建实例对象,因此获取实例对象的速度较快。懒汉式在第一次使用时才创建实例对象,可能会有一定的延迟。

联系:

  1. 都是单例设计模式的实现方式,用于保证一个类只有一个实例对象。
  2. 都需要私有化构造方法,防止外部直接创建实例对象。
  3. 都使用静态方法来获取实例对象。

选择使用饿汉式还是懒汉式取决于具体的需求和场景。如果对性能要求较高,且实例对象的创建和初始化过程较为简单,可以选择饿汉式。如果对性能要求不高,且实例对象的创建和初始化过程较为复杂,可以选择懒汉式。

     

                       文章来源地址https://www.toymoban.com/news/detail-664173.html

到了这里,关于Java中static的应用之单例模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手写java设计模式之单例模式,附源码解读

    在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处: 1、减少类的频繁创建,减少使用频繁使用new创建实例,减少GC压力。 2、某些应用场景下,使用单例模式,保证整个系统中只会创建一个类。 单例模式分两种:饿汉模式和懒汉模

    2024年04月29日
    浏览(31)
  • Java设计模式之单例模式详解--独一无二的事物

    本文主要讲述 单例模式 ,文中使用通俗易懂的案例,使你更好的学习本章知识点并理解原理,做到有道无术。 单例模式是23种设计模式中 创建型模式 的一种,通过单例模式的方法创建的类在当前进程或者线程中只有一个实例。单例模式有两种比较常见的实现方式: 饿汉式

    2024年02月07日
    浏览(36)
  • Java课堂|独一无二的事物(设计模式之单例模式)

    本文主要讲述 单例模式 ,文中使用通俗易懂的案例,使你更好的学习本章知识点并理解原理,做到有道无术。 单例模式是23种设计模式中 创建型模式 的一种,通过单例模式的方法创建的类在当前进程或者线程中只有一个实例。单例模式有两种比较常见的实现方式: 饿汉式

    2024年02月07日
    浏览(35)
  • Java面试之单例模式的六种实现方式

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 由于设计模式在面向对象中起着举足轻重的作用,在面试中很多公司都喜欢问一下有关设计模式的问题。在常用的设计模式中,Singleton单例模式是唯一一个能用短短几十行代码完整实现的模式,因此,写

    2024年02月10日
    浏览(33)
  • Java设计模式之单例模式详解(懒汉式和饿汉式)

    在开发工作中,有些类只需要存在一个实例,这时就可以使用单例模式。Java中的单例模式是一种常见的设计模式,它确保一个类只有一个实例,并提供全局访问点。下面来介绍一下两种常见的单例模式:懒汉式和饿汉式。 懒汉式属于一种延迟加载的单例模式,它的特点是在

    2024年02月15日
    浏览(35)
  • Java 基础进阶篇(一)——— static 静态关键字与单例模式

    static:代表静态的意思,可以修饰成员变量,可以修饰成员方法。 static 修饰方法之后称为 静态方法(类方法) ,修饰成员变量之后称为 静态成员变量(类变量) 。 static 修饰后的成员变量, 可以被类的所有对象共享 (访问、修改) 。 静态成员变量 实例成员变量 概述 有

    2024年02月01日
    浏览(69)
  • java的面向对象编程(oop)——static概述及初始单例设计模式

    过了入门阶段,开始学习进阶语法了。每天进步一点点,打好基础,daydayup! 什么是面向对象编程(oop),可以看这篇 java的面向对象编程(oop)概述及案例  static的意思为静态,用于修饰成员变量及成员方法。 成员变量根据有无static可以分为两种 ——类变量及实例变量 1,类

    2024年01月19日
    浏览(40)
  • Java|static关键字的应用【工具类、代码块和单例】

    在上一篇文章讲完了static的一些基础知识后,我们就来说一说这个在应用开发中具体可以怎么使用吧,希望看完这篇文章可以对您有帮助📖 类中都是一些 静态方法 ,每个方法都是以完成一个公用的功能为目的,这个类用来给系统开发人员 共同使用的 一是调用

    2023年04月12日
    浏览(25)
  • Java单例模式详解--七种单例模式实现+单例安全+实际应用场景

    保证了一个类只有一个实例,并且提供了一个全局访问点。单例模式的主要作用是节省公共资源,方便控制,避免多个实例造成的问题。 实现单例模式的三点: 私有构造函数 私有静态变量维护对象实例 公有静态方法提供获取实例对象 七种单例模式实现 1.静态类:第一次运

    2024年02月04日
    浏览(49)
  • 【JAVA】static、工具类、代码块、单例、继承

    static是静态的意思,可以修饰成员变量和成员方法 static修饰成员变量表示该成员变量 只在内存中存储一份 ,可以被共享访问、修改 静态成员变量( 有static修饰 ,属于类,内存中只加载一次)常表示需要被共享的信息,可以被共享访问(信息需要共享,只需要一份的时候使

    2024年02月13日
    浏览(26)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包