static关键字

static 是Java中的一个关键字,它可以用于修饰类的成员变量和方法,具有特殊的含义和用途。下面是关于static关键字的主要用法和含义:

  1. 静态变量(Static Variables)
    • 静态变量也称为类变量,它们属于类而不是类的实例。
    • 所有该类的对象共享相同的静态变量,它们在内存中只有一个副本。
    • 静态变量在类加载时被初始化,并且可以通过类名来访问。
    • 通常用于存储与类相关的常量值或共享的状态信息。
复制代码
java 复制代码
public class MyClass {
    static int count = 0; // 静态变量

    public MyClass() {
        count++; // 每创建一个实例,静态变量count加1
    }
}

2.静态方法(Static Methods)

  • 静态方法属于类而不属于实例,可以直接通过类名调用,而不需要创建类的实例。
  • 静态方法不能访问非静态成员(变量和方法),只能访问静态成员。
  • 静态方法通常用于执行与类相关的操作,如工具方法或工厂方法。
java 复制代码
public class MathUtils {
    public static int add(int a, int b) {
        return a + b;
    }
}

3.静态代码块(Static Initialization Block)

  • 静态代码块是一个在类加载时执行的代码块,用于执行类级别的初始化操作。
  • 静态代码块只在类加载时执行一次,通常用于初始化静态变量或执行其他一次性操作。
java 复制代码
public class MyClass {
    static {
        // 静态代码块,在类加载时执行
        System.out.println("Class MyClass is loaded.");
    }
}

静态导入(Static Import)

  • 静态导入允许在不使用类名的情况下直接访问类的静态成员。
  • 通过静态导入,可以简化代码,提高可读性。
java 复制代码
import static java.lang.Math.*;

public class MathOperations {
    public static void main(String[] args) {
        double result = sqrt(25); // 静态导入后,可以直接使用sqrt方法
        System.out.println("Square root of 25 is: " + result);
    }
}

static关键字的主要作用是创建与类关联而不是与类的实例关联的成员。它在多种情况下都非常有用,如共享状态信息、提供工具方法等。但需要注意的是,过度使用static可能会导致代码难以维护和测试,因此应谨慎使用。
2.1 static 可以修饰属性
类成员变量或静态成员变量:使用 static 修饰的,作用范围在整个类的所有对象上。所有对象共享这个变 量,在内存中只有一个副本。访问通过 类名. 变量名 访问。在类加载时被初始化,存储在堆里。
实例成员变量:没有static 修饰,作用范围在某个实例对象上。在创建对象时被初始化,存在多个副本。 各个对象不互相影响。通过 实例对象名. 变量名 访问。
2.2 static 可以修饰方法
类方法或静态方法:使用 static 修饰,不能直接使用实例变量,只能直接使用静态变量。只能直接调用静 态方法,不能直接调用实例方法。通过 类名 . 方法名 () 访问
不允许使用 this 关键字
实例方法:没有 static 修饰,既可以使用静态变量,又可以使用实例变量。既可以直接访问实例方法,又 可以直接访问静态方法。 通过 实例对象名. 方法名 () 访问
2.3 static 可以修饰代码块
静态代码块 > 构造代码块 > 构造方法
静态代码块:类加载的时候执行,并且只执行一次,优先于各种代码块和构造方法,最开始执行的。
构造代码块:在创建对象时被调用,每创建一次对象,都会执行一次构造代码块。 执行顺序,优先于构
造方法执行。一个类如果有多个构造方法时,每通过构造方法,创建一个对象,代码块都会被执行一 次。但是对于构造方法来讲,只执行某一个构造方法(根据参数执行)。
2.4 案例:统计一个类创建了多少个实例对象

2.5 单例模式
设计模式:在某些项目环境下,针对某些问题,提供的一种通用的解决方案。
Gang of Four ( GOF ): 23 种软件设计模式
单例模式:保证一个类只能创建一个实例对象,自行实例化,并向整个系统提供这个对象。
实现:
构造方法私有
提供一个当前类的私有静态成员变量
提供一个公有的静态方法,返回成员变量

相关推荐
二哈赛车手8 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
为何创造硅基生物8 小时前
C语言 结构体内存对齐规则(通俗易懂版)
c语言·开发语言
吃好睡好便好8 小时前
在Matlab中绘制横直方图
开发语言·学习·算法·matlab
栗子~~9 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
星寂樱易李9 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
YDS8299 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
仰泳之鹅9 小时前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
之歆9 小时前
DAY_12JavaScript DOM 完全指南(二):实战与性能篇
开发语言·前端·javascript·ecmascript
未若君雅裁10 小时前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
cen__y10 小时前
Linux12(Git01)
linux·运维·服务器·c语言·开发语言·git