Java基础13 面向对象~static关键字和单例模式

2024-09-04 20:38

本文主要是介绍Java基础13 面向对象~static关键字和单例模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

超详细的Java知识点路线图


面向对象系列:
类和对象
封装
继承
多态
static关键字和单例模式
接口和内部类

前言

Hello,大家好,本章我们介绍两个知识点:static关键字和单例模式

static关键字

static的意思是静态,可以用来修饰类的属性和方法,一旦被static修饰的属性和方法,就会由类的所有对象共享,而不是属于某一个对象。

当某些属性和方法不想被对象调用时,就可以定义成静态的。

静态属性

语法:

static 类型 属性名;

静态属性的调用:

类名.属性名
也可以使用:对象名.属性
一般推荐使用类名调用静态成员

静态属性和非静态属性的区别

public class StaticTest {int count;public static void main(String[] args) {StaticTest t1 = new StaticTest();StaticTest t2 = new StaticTest();StaticTest t3 = new StaticTest();t1.count++;t2.count++;t3.count++;System.out.println(t1.count);System.out.println(t2.count);System.out.println(t3.count);}
}

输出结果都是1,如果将count定义为static的,输出结果为3,为什么?
总结:

  1. 静态的属性保存在方法区中,每个对象都共享这一个静态属性。
  2. 非静态的属性是由每个对象都有一个独立的副本。

非静态属性
在这里插入图片描述
静态属性
在这里插入图片描述

静态常量

开发过程中我们需要一些固定的数据,如:圆周率 3.1415926

public static final double PI = 3.1415926;

优点:

  1. 可读性高
  2. 提高数据的安全性
  3. 调用和维护方便

静态方法

定义:

public static 返回值类型 方法名(参数){
}

调用:

类名.方法名(参数)

注意:

  1. 静态方法中可以直接调用当前类的其它静态属性和方法
  2. 静态方法中不能直接调用当前类的非静态方法属性和方法
  3. 非静态方法中可以直接调用当前类的静态和非静态的属性和方法
  4. 静态方法中不能出现this和super关键字

Java中的各种工具类都大量使用静态方法,如:Arrays、Math等

静态代码块

语法:

static{代码块
}

作用:
对静态的成员进行初始化
特点:

  1. 静态代码块只执行一次
  2. 在类加载到内存后执行,是类中所有代码最先执行
  3. 在第一次使用类的使用调用

面试题:下面代码的执行结果

public class Test2 {//静态代码块static{System.out.println("这是静态代码块");}//非静态代码块{System.out.println("这是非静态代码块");}//构造方法public Test2(){System.out.println("这个构造方法");}public static void main(String[] args) {Test2 t1 = new Test2();Test2 t2 = new Test2();Test2 t3 = new Test2();}
}

在这里插入图片描述
执行顺序:

  1. 静态代码块(只执行一次)
  2. 非静态代码块(每个对象执行一次)
  3. 构造方法(每个对象执行一次)

静态导入

jdk1.5的特性,导入某个类的静态方法后,可以不通过类名直接调用

//静态导入
import static java.util.Arrays.sort;public class Test3 {public static void main(String[] args) {int[] array = {3,5,7,8,2};//直接调用sort(array);for(int n : array){System.out.println(n);}}
}

单例模式

设计模式是前人针对不同的应用需求总结一套解决方案,常见的设计模式有23种,也称为GOF23。
单例模式属于GOF23中的创建性模式,作用是:保证一个类只能创建一个实例

单例模式的应用场景

  1. 某些业务场景,如:公司只有一个老板
  2. 减少大型对象对系统资源的消耗,如:连接池、线程池

如何实现单例模式

步骤:

  1. 将构造方法定义成private的
  2. 在单例类的内部定义一个该类的静态对象
  3. 定义一个静态方法用于返回静态对象

单例的分类

单例模式分为:饿汉式和懒汉式
区别是:

  • 饿汉式,一开始就创建对象
    优点:代码简洁
    缺点:如果方法没有调用,就浪费了内存
  • 懒汉式,开始不创建对象,当方法被调用后,再创建对象
    优点:内存的分配更高效
    缺点:有线程安全问题

饿汉式

/*** 单例*/
public class Singleton {//静态对象private static Singleton instance = new Singleton();//私有构造方法private Singleton(){}//返回对象public static Singleton getInstance(){return instance;}public static void main(String[] args) {Singleton s1 = Singleton.getInstance();Singleton s2 = Singleton.getInstance();Singleton s3 = Singleton.getInstance();System.out.println(s1 == s2);System.out.println(s2 == s3);}
}

懒汉式

//静态对象
private static Singleton instance = null;//返回对象
public static Singleton getInstance(){if(instance == null){instance = new Singleton();}return instance;
}

在这里插入图片描述

结束

好了,本文内容就是这么多,欢迎大家留言讨论


大家如果需要学习其他Java知识点,戳这里 超详细的Java知识点汇总

这篇关于Java基础13 面向对象~static关键字和单例模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136978

相关文章

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注

Java操作Word文档的全面指南

《Java操作Word文档的全面指南》在Java开发中,操作Word文档是常见的业务需求,广泛应用于合同生成、报表输出、通知发布、法律文书生成、病历模板填写等场景,本文将全面介绍Java操作Word文... 目录简介段落页头与页脚页码表格图片批注文本框目录图表简介Word编程最重要的类是org.apach

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

java中反射Reflection的4个作用详解

《java中反射Reflection的4个作用详解》反射Reflection是Java等编程语言中的一个重要特性,它允许程序在运行时进行自我检查和对内部成员(如字段、方法、类等)的操作,本文将详细介绍... 目录作用1、在运行时判断任意一个对象所属的类作用2、在运行时构造任意一个类的对象作用3、在运行时判断

java如何解压zip压缩包

《java如何解压zip压缩包》:本文主要介绍java如何解压zip压缩包问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java解压zip压缩包实例代码结果如下总结java解压zip压缩包坐在旁边的小伙伴问我怎么用 java 将服务器上的压缩文件解压出来,

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注