当前位置: 首页 > news >正文

面向对象高级(2)单例设计对象与代码块

面向对象高级(2) 单例设计模式、main方法与代码块

引言;

设计模式:特定环境下特定问题的处理方法。可理解为一种经典的可以参照的模板。单例设计模式则是只存在单个对象实例、且只有一种方法获取对象实例的一种设计模式。

单例设计模式

1、设计思路:

(1)封装构造器,将构造器私有化,即可达到无法在类的外部创建对象的目的。

(2)在类的内部创建实例

(3)使用getInstance方法获取实例,声明为static。

2、两种实现方式

(1)饿汉式;

public class single {
    private String name;

    private single(String name) {
        this.name = name;
    }
    private static single single = new single("Lily");

    public static single getInstance(){
        return single;
    }
}

(2)懒汉式:

public class Lazy {
    private String time;

    private Lazy(String time) {
        this.time = time;
    }

    private static Lazy laziness;

    public static Lazy getInstance(){
        if(laziness==null)
            laziness = new Lazy("all the time");
        return laziness;
    }
}

3、对比饿汉式与懒汉式

(1)饿汉式

  • 特点:立即加载,即在使用类的时候已经将对象创建完毕。
  • 优点:实现起来简单;没有多线程安全问题。
  • 缺点:当类被加载的时候,会初始化static的实例,静态变量被创建并分配内存空间,从这以后,这个static的实例就一直占着这块内存,直到类被卸载时,静态变量被摧毁,并释放所占有的内存。因此在某些特定条件下会耗费内存

(2)懒汉式

  • 特点:延迟加载,即在调用静态方法时实例才被创建。
  • 优点:实现起来比较简单;当类被加载的时候,static的实例未被创建并分配内存空间,当静态方法第一次被调用时,初始化实例变量,并分配内存,因此在某些特定条件下会节约内存
  • 缺点:在多线程环境中,这种实现方法是完全错误的,线程不安全,根本不能保证单例的唯一性。
    • 说明:在多线程章节,会将懒汉式改造成线程安全的模式。

4、单例模式的优点

由于单例模式只生成一个实例,减少了系统性能开销

常见的单例模式应用:

  • Windows的Task Manager (任务管理器)就是很典型的单例模式
  • Windows的Recycle Bin (回收站)也是典型的单例应用。在整个系统运行过程中,回收站一直维护着仅有的一个实例。
  • Application 也是单例的典型应用
  • 数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。

代码块

代码块(或初始化块)的作用

  • 对Java类或对象进行初始化
  • 代码块(或初始化块)的分类
    • 一个类中代码块若有修饰符,则只能被static修饰,称为静态代码块(static block)
    • 没有使用static修饰的,为非静态代码块。

1、静态代码块

在代码块的前面加static,就是静态代码块。

(1)静态代码块的格式

【修饰符】 class 类{
static{
        静态代码块
    }
}

2静态代码块的特点:

  • 可以有输出语句。
  • 可以对类的属性、类的声明进行初始化操作。
  • 不可以对非静态的属性初始化。即:不可以调用非静态的属性和方法。
  • 若有多个静态的代码块,那么按照从上到下的顺序依次执行。
  • 静态代码块的执行要先于非静态代码块。
  • 静态代码块随着类的加载而加载--->只执行一次。

2、非静态代码块

(1)格式:

【修饰符】 class 类{
    {
        非静态代码块
    }
    【修饰符】 构造器名(){
     // 实例初始化代码
    }
    【修饰符】 构造器名(参数列表){
        // 实例初始化代码
    }
}

(2)意义:如果多个构造器中存在公共的代码,且公共代码先于构造器中其他代码执行,则将这些公共代码提取放入代码块中,减少冗余代码。

非静态代码块的执行特点
  • 可以有输出语句。
  • 可以对类的属性、类的声明进行初始化操作。
  • 除了调用非静态的结构外,还可以调用静态的变量或方法。
  • 若有多个非静态的代码块,那么按照从上到下的顺序依次执行。
  • 随着对象的创建而执行,当前类中每创建一个实例,则执行一次非静态代码块。

举例:

public class Block{

public static void main(String[] args) {

//随着类的创建,先行执行静态代码块中的内容。

        Person p1 = new Person();//随着对象的创建,调用非静态代码块中的内容

        p1.eat();//根据对象调方法。

    }

}

class Person{

    String name;

    int age;

    public void eat(){

        System.out.println("People need eat.");

    }

    public static void useComputer(){

        System.out.println("I'm so despair.");

    }

   

    public Person(){}//空参构造器

   

    {

    System.out.println("not static.");

    }

    static{

    System.out.println("static.");

    useComputer();

    }//静态代码块调用静态结构。

}

相关文章:

面向对象高级(2)单例设计对象与代码块

面向对象高级(2) 单例设计模式、main方法与代码块 引言; 设计模式:特定环境下特定问题的处理方法。可理解为一种经典的可以参照的模板。单例设计模式则是只存在单个对象实例、且只有一种方法获取对象实例的一种设计模式。 单例设…...

47小型项目的规划与实施

每天五分钟学Linux | 第四十七课:小型项目的规划与实施 大家好!欢迎再次来到我们的“每天五分钟学Linux”系列教程。在前面的课程中,我们学习了并发编程的知识,包括如何管理和使用进程与线程。今天,我们将探讨如何规划…...

堤防安全监测系统方案

一、背景情况 堤防是开发利用水资源和防治水灾害的重要工程措施之一,对防洪、供水、生态、发电、航运等至关重要。我国现有堤防9.8万多座,其中大中型堤防4700多座、小型堤防9.4万座,80%以上修建于上世纪50至70年代。由于堤防管护力量薄弱&am…...

聊聊Flink:这次把Flink的window分类(滚动、滑动、会话、全局)、窗口函数讲透

一、窗口 窗口(Window)是处理无界流的关键所在。窗口将流分成有限大小的“桶”,我们可以在其上应用算子计算。Flink可以使用window()和windowAll()定义一个窗口,二者都需要传入一个窗口分配器WindowAssigner,WindowAs…...

mysql-分析MVCC原理

一、MVCC简介 MVCC是一种用来解决读写冲读的无锁并发控制,也就是为事务分配单增长的时间戳,为每个修改保存一个版本,版本与事务时间戳关联,读操作只读该事务开始前的数据库的快照,所以MVCC可以为数据库解决一些问题。…...

由于答案过大,请对a取模。取模后的答案不是原问题的答案 取模有何意义呢 详解

在许多情况下,处理大数时会将 a 取模,即用 a m o d m a \mod m amodm的结果代替 a a a,然后继续计算。这种做法的核心问题是:取模后的值与原问题之间的关系是否保持一致。取模后的意义在于,它在不改变问题核心特性的前…...

【c++篇】掌握动态内存的奥妙

【C篇】动态内存 一、Static 关键字1.1函数内部的静态变量1.2 全局静态变量1.3静态成员变量1.4静态成员函数 二、内存管理2.1栈区(Stack)2.2堆区(Heap) 三、动态内存分配机制3.1、动态内存分配的两种方法c语言c 3.2new 和delete的用法3.3语法和类型安全性…...

5.4.2-3 编写Java程序读取HDFS文件

在本次实战中,我们通过Java程序实现了从Hadoop分布式文件系统(HDFS)读取文件的功能。首先,我们创建了ReadFileOnHDFS类,并在其中实现了两个方法:read1()和read1_()。read1()方法展示了如何打开HDFS文件并逐…...

@EnableConfigurationProperties @ConfigurationProperties

EnableConfigurationProperties && ConfigurationProperties的使用时机 今天在写properties时想到了这个问题,为什么有时候我需要写EnableConfigurationProperties有时候又不需要呢?下面就详细讲讲。 Data Component ConfigurationProperties(pr…...

RK3588适配MTK7921 USB接口WiFi驱动开发

在当前RK原厂提供的SDK里面已经适配的WiFi模组有不少,但是支持的模组大部分集中在realtek、正基、英飞凌等厂家。主要型号有Realtek的RTL8188系列、RTL8723系列、RTL8812系列、RTL8821系列、RTL8822系列和支持WiFi 6 的RTL8852系列,正基的AP6275系列、AP6276系列等。接下来将…...

【数据结构OJ】【图论】图综合练习--拓扑排序

题目描述 已知有向图,顶点从0开始编号,求它的求拓扑有序序列。 拓扑排序算法:给出有向图邻接矩阵 1.逐列扫描矩阵,找出入度为0且编号最小的顶点v 2.输出v,并标识v已访问 3.把矩阵第v行全清0 重复上述步骤&#xff0…...

模型 I/O 与 LangChain 实践

模型 I/O 与 LangChain 实践 本文是《LangChain 实战课》第 4 节——模型 I/O:输入提示、调用模型、解析输出的一些学习笔记与总结。这篇文章将围绕模型 I/O 的基本概念、LangChain 提供的最佳实践以及如何通过 LangChain 实现高效的结构化数据处理展开。 什么是模…...

C++:用红黑树封装map与set-1

文章目录 前言一、STL源码分析二、红黑树的构建三、map与set整体框架的搭建与解析四、如何取出进行比较?1. met与set的数据是不同的2. 取出数据进行比较1)问题发现2)仿函数解决 五、封装插入六、迭代器的实现1. operator* 与operator->2. …...

HBU算法设计与分析 贪心算法

1.最优会场调度 #include <bits/stdc.h> using namespace std; const int N1e55; typedef pair<int,int> PII; PII p[N]; priority_queue<int,vector<int>,greater<int>> q; //最小堆 存储最早结束的会场的结束时间 int n; //其实这个题可以理…...

python pycharm安装教程及基本使用,超详细

一.PyCharm下载及安装 1.1 进入pycharm官网&#xff0c;点击下载,下载社区版本&#xff08;日常学习使用够用了&#xff09;&#xff0c;专业版是收费的哦&#xff08;功能更强大&#xff09; Download PyCharm: The Python IDE for data science and web development by Jet…...

变量提升函数提升

示例 1&#xff1a;变量提升 原始代码&#xff1a; console.log(x); // 输出: undefined var x 5; console.log(x); // 输出: 5提升后的代码&#xff08;理解为&#xff09;&#xff1a; var x; // 变量声明被提升 console.log(x); // 输出: undefined x 5; // 赋值 conso…...

el-table vue3统计计算数字

固定合计在最下列 父组件 <template><el-tablev-loading"loading"tooltip-effect"light":data"list"style"width: 100%":max-height"maxHeight"element-loading-text"拼命加载中...":header-cell-styl…...

IDE应当具备的功能

IDE 是辅助编程的工具&#xff0c;应当具备以下功能 语法高亮 显示注释 显示光键词 显示括号 matlab 自带的 IDE 没有这个功能 显示缩进 matlab 自带的 IDE 没有这个功能 显示字符串 显示数字常量 定位到函数的定义位置 Matlab 自带的集成开发环境&#xff08;IDE&am…...

Stable Diffusion初步见解(二)

Stable Diffusion 是一种先进的深度学习模型&#xff0c;用于生成高质量的图像和艺术作品。它基于扩散模型&#xff08;Diffusion Models&#xff09;&#xff0c;并结合了潜在扩散模型&#xff08;Latent Diffusion Models&#xff09;以及条件生成技术&#xff08;如文本到图…...

前端框架 react 性能优化

目录 一、不使用任何性能优化API进行优化 二、通过性能优化API优化 1、React.memo 2、useCallback 3、useMemo 4、PureComponent 三、总结​ 总览&#xff1a;react的优化核心思想就是让react跳过重新渲染那个些没有改变的Component&#xff0c;而只重新渲染发生变化的C…...

Windows与Office智能激活终极指南:KMS_VL_ALL_AIO完整解决方案

Windows与Office智能激活终极指南&#xff1a;KMS_VL_ALL_AIO完整解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 在数字化工作环境中&#xff0c;稳定可靠的操作系统和办公软件是高效工…...

保姆级教程:用AKShare+Backtrader+quantstats搭建你的第一个本地量化回测环境(避坑指南)

从零搭建本地量化回测系统&#xff1a;AKShare数据抓取Backtrader策略开发quantstats绩效分析实战指南第一次尝试量化投资的开发者常会遇到这样的困境&#xff1a;在线回测平台担心策略泄露&#xff0c;本地搭建环境又卡在依赖安装、数据格式转换等基础环节。本文将用最简化的方…...

别再只盯着PCA了!用Python手写LDA降维,从鸢尾花数据分类实战讲起

别再只盯着PCA了&#xff01;用Python手写LDA降维&#xff0c;从鸢尾花数据分类实战讲起当数据科学家面对高维数据时&#xff0c;降维技术总是工具箱中的首选武器。大多数人的第一反应是PCA&#xff08;主成分分析&#xff09;&#xff0c;这个无监督学习的经典方法确实能有效压…...

免费视频字幕提取终极指南:3分钟快速提取多语言硬字幕

免费视频字幕提取终极指南&#xff1a;3分钟快速提取多语言硬字幕 【免费下载链接】video-subtitle-extractor 视频硬字幕提取&#xff0c;生成srt文件。无需申请第三方API&#xff0c;本地实现文本识别。基于深度学习的视频字幕提取框架&#xff0c;包含字幕区域检测、字幕内容…...

QKeyMapper终极指南:免费开源按键映射工具,5分钟让你的键盘鼠标手柄随心所欲

QKeyMapper终极指南&#xff1a;免费开源按键映射工具&#xff0c;5分钟让你的键盘鼠标手柄随心所欲 【免费下载链接】QKeyMapper [按键映射工具] QKeyMapper&#xff0c;Qt开发Win10&Win11可用&#xff0c;不修改注册表、不需重新启动系统&#xff0c;可立即生效和停止。支…...

023、PCB设计软件选择与安装(Altium Designer)

023、PCB设计软件选择与安装(Altium Designer) 从一块烧掉的板子说起 去年冬天,我接手一个同事离职留下的项目——一块四层板的电机驱动板。原理图看着没问题,Layout也走通了,打样回来上电,MOS管直接冒烟。排查三天,最后发现是电源回路的地线回流路径被一根细长的走线…...

Anthropic为何如此反华

美国政客对中国进行科技封锁&#xff0c;本不是什么新闻。但一个商业公司宁可损失上亿美元的收入也要禁止中国人访问他们的AI就有点魔症了。我们不禁要问&#xff1a;为什么我们现在看到Anthropic的CEO Dario Amodei在所有场合都持强硬的反华立场&#xff0c;不免感觉有些奇怪。…...

GitHub中文插件:打破语言壁垒,让开源协作更顺畅

GitHub中文插件&#xff1a;打破语言壁垒&#xff0c;让开源协作更顺畅 【免费下载链接】github-chinese GitHub 汉化插件&#xff0c;GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 你是否曾在Git…...

多目标优化模型MO-OBAM:在数据匿名化中权衡隐私保护与数据效用

1. 项目概述与核心挑战在金融风控、医疗研究和精准营销这些数据驱动的核心领域&#xff0c;我们每天都在面对一个看似无解的悖论&#xff1a;数据越详细、越原始&#xff0c;从中挖掘出的价值就越大&#xff0c;但随之而来的隐私泄露风险也呈指数级增长。我处理过不少项目&…...

Decompyle++:Python字节码源码恢复实战指南

1. 这不是“反编译”&#xff0c;是字节码层面的源码重建——为什么Decompyle成了Python逆向事实标准你有没有遇到过这样的情况&#xff1a;接手一个只有.pyc文件的遗留项目&#xff0c;没有源码&#xff0c;连__pycache__目录都被人删干净了&#xff1b;或者审计第三方SDK时&a…...