Java中static的作用

static 关键字在 Java 中有多种用途,主要用来修饰类的成员(包括变量、方法、内部类和代码块)。下面是 static 关键字的几种常见作用:

1. 静态变量(类变量)

  • 定义 :用 static 修饰的变量属于类本身,而不是类的实例(对象)。这意味着所有的对象共享同一个静态变量。
  • 用途:静态变量可以用于存储类的全局状态,所有类的实例都可以访问和修改这个变量。
  • 示例:
java 复制代码
public class Example {
    static int counter = 0; // 静态变量

    public Example() {
        counter++;
    }
}

2. 静态方法(类方法)

  • 定义 :用 static 修饰的方法属于类本身,可以直接通过类名调用,而不需要创建类的实例。
  • 用途:静态方法常用于不依赖于实例变量的方法,或者用于工厂方法、工具类方法等。

示例:

java 复制代码
public class MathUtil {
    public static int add(int a, int b) {
        return a + b;
    }
}
// 调用方式
int result = MathUtil.add(5, 10);

3. 静态代码块

  • 定义 :静态代码块用于在类加载时执行一些静态初始化操作,只会执行一次。
  • 用途:静态代码块通常用于初始化静态变量或者执行一次性操作。
  • 示例
java 复制代码
public class Example {
    static int value;

    static {
        value = 42; // 静态代码块
    }
}

4. 静态内部类

  • 定义 :用 static 修饰的内部类不依赖于外部类的实例,可以直接通过外部类名访问。
  • 用途:静态内部类通常用于封装不依赖于外部类实例的逻辑。
  • 示例:
java 复制代码
public class OuterClass {
    static class InnerClass {
        void display() {
            System.out.println("This is a static inner class");
        }
    }
}
// 调用方式
OuterClass.InnerClass inner = new OuterClass.InnerClass();
inner.display();

5. 静态导入(Static Import)

  • 定义 :通过 import static 可以导入类中的静态成员,使用时可以直接引用而不需要类名。
  • 用途:静态导入常用于简化代码,使得引用类的静态成员时更加简洁。
  • 示例:
java 复制代码
import static java.lang.Math.PI;
import static java.lang.Math.sqrt;

public class Example {
    public static void main(String[] args) {
        System.out.println("PI: " + PI);
        System.out.println("Square root of 4: " + sqrt(4));
    }
}
相关推荐
Nebula_g几秒前
JavaSE拓展:工具类Executors
java·开发语言·后端·spring·基础·javase
扶风ff7 分钟前
练题簿在线免费刷题:会员线下组卷、Word 试卷与成绩导入,课堂检测更方便
java·开发语言·算法·小程序·word
鱼宵8 分钟前
Spring AI 可观测与透明化:traceId 串起全链路,思考过程实时直播给用户
java·人工智能·spring·链路追踪·springai
Raas10022 分钟前
AI网关能做语义缓存吗?MAI Gateway(魔芋企业级AI网关)实战能力深度解读
java·后端·spring
天空鸟_时光不老29 分钟前
13-亮点提炼:把技术说辞翻译成业务价值
java·spring boot·spring·spring cloud·mybatis
小蒜学长33 分钟前
基于SpringBoot+Vue的租房管理系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·租房管理
C++ 老炮儿的技术栈35 分钟前
char (*csConnectName)[256]; 和 char csConnectName [256] 有什么区别
java·c语言·开发语言·c++·人工智能·算法·c
洋就在江州39 分钟前
gitlab-cicd 离线集成——springboot-cicd (非docker形式,shell形式)
java·spring boot·后端·ci/cd·gitlab·gitlab-runner
CEZ1 小时前
JeeWMS 开源 WMS 全景导览:一套 Java 仓库管理系统从单据流到代码入口的阅读地图
java·开源
Nebula_g1 小时前
JavaSE加强:线程Thread(线程安全重点)
java·开发语言·jvm·算法·javase·技术栈