Java中的static关键字

static 是 Java 中的一个关键字,

主要用于修饰类成员(变量和方法),

以表示这个成员属于类本身,而不是类的实例

1. 静态变量(Static Variables)

类级属性: 静态变量也称为类变量或静态属性,它们在类加载时初始化,并且只有一份拷贝,被所有该类的对象共享。这意味着无论创建多少个对象,静态变量的内存空间只有一处。

生命周期长:静态变量的生命周期与类相同,只要应用运行,它们就存在。

访问方式:可以直接通过类名访问,而无需创建类的实例。例如,ClassName.staticVar。

**概念:**静态变量,也称为类变量,是类的一部分,而不仅仅是类的实例的一部分。这意味着无论你创建了多少个类的实例,这些实例都共享同一份静态变量。

举例:

java 复制代码
public class Counter {
    static int count = 0; // 静态变量

    public Counter() {
        count++; // 每创建一个实例,count 加一
    }
}

// 在某个地方
Counter c1 = new Counter();
Counter c2 = new Counter();

System.out.println(Counter.count); // 输出 2,因为 c1 和 c2 共享同一个 count

System.out.println(Counter.count); // 输出 2,因为 c1 和 c2 共享同一个 count
**为什么使用:**静态变量在某些场景下特别有用,比如计数器、配置项等,它们不需要针对每个对象实例化一份。

2. 静态方法(Static Methods)

不依赖于实例: 静态方法可以在没有实例的情况下调用。这意味着它们不依赖于任何对象的状态,无法访问实例变量(非静态变量),但可以访问静态变量。
**调用方式:**同样可以通过类名直接调用,如 ClassName.staticMethod()。

**概念:**静态方法是与类关联的,不受实例状态影响,也不需要实例就能调用的方法。

举例:

java 复制代码
public class MathUtil {
    static double square(double x) {
        return x * x;
    }
}

// 调用
double result = MathUtil.square(2.0);

**为什么使用:**当一个方法操作的是纯数据,不依赖于对象状态,或者用于辅助性的公共操作时,可以设计为静态方法。

3. 静态初始化块(Static Initialization Block)

执行时机: 当类首次被加载时,静态初始化块会被执行一次。
**用途:**用于初始化静态变量或执行类级别的初始化工作。

**概念:**在类加载时就会执行的代码块,用于初始化静态变量。

举例:

java 复制代码
public class Config {
    static String path;

    static {
        try {
            path = "config.properties"; // 静态初始化块
        } catch (Exception e) {
            path = "default.properties";
        }
    }
}

**为什么使用:**静态初始化块在类加载时执行,适合用来初始化静态变量,确保它们在类第一次使用时已经准备好。

4. 静态内部类(Static Nested Classes)

独立于外部类: 静态内部类不依赖于外部类的实例,可以像普通类一样创建实例。
**访问限制:**可以访问外部类的静态成员,但不能直接访问非静态成员。

**概念:**内部类的一种形式,与外部类没有绑定关系,更像一个独立的类。

举例:

java 复制代码
public class OuterClass {
    static class StaticInnerClass {
        void print() {
            System.out.println("Hello from static inner class.");
        }
    }
}

// 在另一个地方
OuterClass.StaticInnerClass inner = new OuterClass.StaticInnerClass();
inner.print();

**为什么使用:**静态内部类如果不需要访问外部类的非静态成员,则可以设计为静态内部类,它更灵活,可以像一个普通的类那样使用。

5. 静态导入(Static Import)

**简化访问静态成员:**通过 import static 语句,可以避免在代码中每次调用静态方法或变量时都带上类名。

**概念:**通过 import static 导入静态变量或方法,使代码更加简洁。

举例:

java 复制代码
import static java.lang.Math.*;

public class Main {
    public static void main(String[] args) {
        double result = sqrt(4.0); // 直接调用静态方法,无需前缀
    }
}

**为什么使用:**静态导入可以减少代码冗余,提高代码可读性和整洁度。但应适度使用,以免过多的静态导入造成命名冲突。

静态变量、静态方法和静态初始化块的示例

java 复制代码
public class Example {
    static int count; // 静态变量
    static { // 静态初始化块
        count = 0;
    }

    public static void increment() { // 静态方法
        count++;
    }

    public static void main(String[] args) {
        Example.increment(); // 通过类名调用静态方法
        System.out.println(Example.count); // 直接通过类名访问静态变量
    }
}

这段代码展示了静态变量、静态方法和静态初始化块的使用。注意 increment 方法和 count 变量都可以在没有实例的情况下直接通过类名访问。

相关推荐
苹果醋330 分钟前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
晓纪同学1 小时前
QT-简单视觉框架代码
开发语言·qt
威桑1 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
Hello.Reader1 小时前
深入解析 Apache APISIX
java·apache
飞飞-躺着更舒服1 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 16课题、并发编程
开发语言·青少年编程·并发编程·编程与数学·goweb
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 17课题、静态文件
开发语言·青少年编程·编程与数学·goweb
Java Fans1 小时前
C# 中串口读取问题及解决方案
开发语言·c#
盛派网络小助手1 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
菠萝蚊鸭1 小时前
Dhatim FastExcel 读写 Excel 文件
java·excel·fastexcel