Java关键字static

本文探讨了静态成员变量与静态方法的基本概念,内存原理,以及在工具类、代码块和单例模式(包括饿汉和懒汉模式)中的实际运用。了解如何合理使用static,提升代码复用性和单例设计的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. static是什么

  • static是静态的意思,可以修饰成员变量和成员方法。
  • static修饰成员变量表示该成员变量只在内存中只存储一份,可以被共享访问,修改。

2. static变量

2.1 成员变量分类

  • 静态成员变量(有static修饰,属于类,内存中加载一次),推荐用类名.静态成员变量的方式访问。
  • 实例成员变量(无static修饰,存在于每个对象中),用对象.实例成员变量的方式访问
  • 同一个类中访问静态成员变量可以省略类名。

2.2 static变量的内存原理

在这里插入图片描述

3. static成员方法

3.1 static成员方法使用

  • 静态成员方法(有static修饰,归属于类),建议用类名访问,也可以用对象访问。
  • 实例成员方法(无static修饰,归属于对象),只能用对象触发访问。
  • 表示对象自己的行为,且方法中需要访问实例成员的,则该方法必须申明成实例方法。
  • 如果该方法是以执行一个共用功能为目的,则可以申明成静态方法。

3.2 static成员方法内存原理

在这里插入图片描述

4. 注意事项

  • 静态方法只能访问静态成员,不可以直接访问实例成员。
  • 实例方法可以访问静态成员、实例成员。
  • 静态方法中不可以出现this关键字。

5. 应用

5.1 工具类

定义: 类中都是一些静态方法,每个方法都是以完成一个共用的功能为目的,这个类用来给系统开发人员共同使用的 。
特点:

  1. 方便调用,提高代码复用。
  2. 工具类无需创建对象,建议将工具类构造器私有。

5.2 代码块

静态代码块:

  • 格式:static{}
  • 特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发,只执行一次。
  • 场景:在类加载的时候做一些静态数据初始化的操作,以便后续使用
    构造代码块:
  • 格式:{}
  • 特点:每次创建对象,调用构造器执行时,都会执行该代码块中的代码,并在构造器执行前执行。
  • 使用场景:初始化实例资源

5.3 单例

单例模式: 一个类永远只有一个实例。

5.3.1 饿汉单例模式

在用类获取对象的时候,对象已经提前为你创建好了。
设计步骤:

  • 定义一个类把构造器私有。
  • 定义一个静态变量存储一个对象。
public class SingleInstance {
    //提前准备一个对象
    public static SingleInstance instance = new SingleInstance();

    //必须把构造器私有化
    private SingleInstance(){
        System.out.println("创建了一个对象");
    }
}
5.3.2 懒汉单例设计模式
  • 在真正需要该对象的时候,才去创建一个对象(延迟加载对象)。
public class LazySingleInstance {
    //定义一个静态私有成员变量负责存储单例,只加载一次
    private static LazySingleInstance lazySingleInstance;
    
    //私有化的构造器
    private LazySingleInstance(){};
    
    //提供一个方法返回单例对象
    public static LazySingleInstance getLazySingleInstance(){
        if(lazySingleInstance==null){
            lazySingleInstance = new LazySingleInstance();
        }
        return lazySingleInstance;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值