首页 > 编程语言 >Java入门:08.Java中的static关键字02(拓展:单例模式)

Java入门:08.Java中的static关键字02(拓展:单例模式)

时间:2024-09-14 08:50:58浏览次数:3  
标签:02 Java 对象 08 代码段 static 单例 方法 public

1.3 对象代码段和静态代码段

什么是代码段?

  • 就是个{} 里面包含一堆代码

  • 代码段可以写在方法中 , 也可以写在方法外

  • 代码段可以方法中和方法外独立存在,也可以配合着 分支结构和循环结构存在

    class A{
        {
            .....
        }
        public void t1(){
            {
                .....
            }
        }
        
        public void t2(){
            if(){
                System.out.println()
                System.out.println()
                System.out.println()
                System.out.println()
            }
            while(){}
        }
        
    }

方法外的代码端

  • 写在方法外,但要写在类里。

  • 可以是普通的代码段,也可以是增加了static关键字修饰的代码段

  • 前者就称为对象代码段(普通代码段), 后者称为静态代码段

  • 对象代码段,在创建对象时,自动执行,每个对象的创建仅执行一次。

    如果创建多个对象,这个代码段就会被执行多次。

  • 静态代码段,在类加载时,自动执行,且仅执行一次

    class A{
        {
            ...
        }
        
        static{
            ...
        }
    }

扩展

java类在编译时,会自动的提供两种初始化方法

  1. <init> 对象的初始化方法 。 其内容来自于构造方法和对象代码段, 如果有构造方法重载的,就会有多个对象初始化方法

  2. <clinit>类的初始化方法。没有专门的对应的方法,方法的内容就是静态代码段的内容。

2 单例模式

单例模式是一种设计模式

什么是设计模式?

  • 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结

设计模式主要分为3大类

  • 创建型 : 如何创建对象 , 例如单例模式,如何只创建一个对象。

  • 结构型 : 设计不同的执行结构,适合不同的执行场景。 暂不解释。

  • 行为型 : 与具体的行为操作有关,例如策略模式,如何根据不同的策略完成功能。

单例模式特点

  • 确保在jvm内存中,或在程序执行的过程中,某一个类只会产生一个对象。

  • 重点在于是否能想明白 为什么只需要对象创建一次,而不在于如何实现对象只创建一次。

单例模式的实现

  1. 需要构造方法私有化。 不再使用public修饰构造方法,改用private修饰构造方法

    private修饰的方法或者属性只有类自己可以使用。外部类不能使用。

  2. 定义一个属性,来存储类自身创建的对象

    类自身只创建一次

  3. 提供一个方法,外部使用者可以通过调用这个方法,获得刚刚存入属性中的那个对象

    class D{
        
        private D(){}
    ​
        static D d = new D();
    ​
        public static D getD(){
            return d ;
        }
        //-----------------------
        //属性
        //方法
    }
    • 由于外部类调用这个方法的时候,还没拥有D对象, 所以只能通过类调用这个方法。

      所以这个方法应该是static方法

    • static方法中不能直接使用非静态的属性,

      所以d属性应该也是静态的

注意:

单例模式的设计与类对象应该具备哪些属性和方法无关。

扩展:懒汉式和饿汉式

  • 饿汉式的单例模式:在类加载时就完成对象的创建,并将其存入属性变量

    特点:空间换时间

    class D{
        
        private D(){}
    ​
        static D d = new D();
    ​
        public static D getD(){
            return d ;
        }
    }

  • 懒汉式的单例模式:在类加载时先不创建对象, 第一次请求对象时再创建对象

    特点:时间换空间

    class D{
        
        private D(){}
    ​
        static D d ;
    ​
        public static D getD(){
            if(d == null){
                //还没有创建呢
                d = new D();
            }
            return d ;
        }
    }

标签:02,Java,对象,08,代码段,static,单例,方法,public
From: https://blog.csdn.net/a2018204587/article/details/142144703

相关文章

  • Java EhCache 入门:从“Hello, EhCache!”到深入探索
    ......
  • 【专题】2024大健康产业热点分析报告合集PDF分享(附原数据表)
    原文链接:https://tecdat.cn/?p=37691自《健康中国2030》规划发布以来,“预防优于治疗”的理念逐渐成为共识。这推动了传统以治疗为中心的健康产业向更广泛的大健康产业转型,形成了一个覆盖面更广、增长动力更强的产业体系。得益于国家政策的大力支持、技术的迅猛发展、市场需求的稳......
  • 学习日历 -2024/9/13
    从今天开始放中秋假期,5天的时间,实在是太棒了建民说下周四要补测,还好不是周五,周五周六我要出去今天学习了数据结构二叉树的一些基本知识数据结构(树)度:每一个节点的字节点数量树高:树的总层数根结点:最顶层的节点左子节点:左下方的节点右子节点:右下方的节点根结点......
  • Java 21的Logging的笔记
    JavaCoreLibrariesJavaLoggingJDK自带的日志记录框架,提供了基本功能,但在项目中没有实际使用过。通常会使用SLF4J和Log4j2或者Logback搭配。以maven管理的项目为例,修改pom.xml,增加如下配置:<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</art......
  • 《深入理解 Java 中的多线程基础(篇一)》
    多线程基础概述现代操作系统(Windows,macOS,Linux)都可以执行多任务。多任务就是同时运行多个任务。例如:播放音乐的同时,浏览器可以进行文件下载,同时可以进行QQ消息的收发。CPU执行代码都是一条一条顺序执行的,但是,即使是单核CPU,也可以同时运行多个任务。因为操作系统执行多任......
  • Java 21的Collections Framework的笔记
    JavaCoreLibrariesJavaCollectionsFrameworkCreatingUnmodifiableLists,Sets,andMaps相对于普通的容器类,不可变容器的对象,占用的内存少,内存利用更高效。在仅有只读操作时,使用不可变容器的对象,会有性能和空间方面的优势。不可变List的构建样例代码,如下:List<St......
  • 2024/9/13日 日志
    今天,系统的对代码进行了修改优化,对原有代码进行全面修改,并实现了工序对接功能。点击查看代码//信2305-2--20234023--张一衡importjava.awt.*;importjava.sql.SQLOutput;importjava.util.Scanner;importjava.util.Random;publicclassMoontest{publicstat......
  • Java基础内容集合
    这部分Java中的基础内容,集合,也叫做Java容器,用在很多的地方。集合是用来存储数据的,简称为容器,其中这里的存储指内存层面的存储,不是持久化存储。1.数组的特点:指定长度后,长度不可以更改声明了类型后,数组只能存放这个类型的数据。数组的查询效率高,删除、增加元素的效率低数组......
  • [Java基础]基本数据类型
    Java的基本数据类型包括以下8种:byte(1字节):用于表示整数值,取值范围为-128到127。short(2字节):用于表示整数值,取值范围为-32768到32767。int(4字节):用于表示整数值,取值范围为-2147483648到2147483647。long(8字节):用于表示整数值,取值范围为-9223372036854775808到92......
  • JavaScript语法入门六 数据类型
    数据类型JavaScript数据类型有8种,分别是number、bigint、string、boolean、null、undefined、symbol、object。JavaScript是一种弱类型语言,或者说动态类型语言。即每一个变量的类型在定义之后可变化的,JavaScript根据使用情况自动识别。number类型整数、浮点数。范围:常规的数字、Inf......