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 种软件设计模式
单例模式:保证一个类只能创建一个实例对象,自行实例化,并向整个系统提供这个对象。
实现:
构造方法私有
提供一个当前类的私有静态成员变量
提供一个公有的静态方法,返回成员变量

相关推荐
时光の尘1 分钟前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
paopaokaka_luck2 分钟前
[371]基于springboot的高校实习管理系统
java·spring boot·后端
以后不吃煲仔饭15 分钟前
Java基础夯实——2.7 线程上下文切换
java·开发语言
进阶的架构师15 分钟前
2024年Java面试题及答案整理(1000+面试题附答案解析)
java·开发语言
前端拾光者19 分钟前
利用D3.js实现数据可视化的简单示例
开发语言·javascript·信息可视化
The_Ticker21 分钟前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
程序猿阿伟21 分钟前
《C++ 实现区块链:区块时间戳的存储与验证机制解析》
开发语言·c++·区块链
傻啦嘿哟39 分钟前
如何使用 Python 开发一个简单的文本数据转换为 Excel 工具
开发语言·python·excel
大数据编程之光43 分钟前
Flink Standalone集群模式安装部署全攻略
java·大数据·开发语言·面试·flink
初九之潜龙勿用43 分钟前
C#校验画布签名图片是否为空白
开发语言·ui·c#·.net