java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java中static关键字用法与场景

Java中static关键字的用法与场景深入理解

作者:༄沐࿆风࿆࿆

在Java语言中,static关键字是一种非常重要的修饰符,可以用于变量、方法、代码块和内部类等语法结构中,这篇文章主要介绍了Java中static关键字用法与场景的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下

前言

在 Java 开发中,static 是一个高频使用且非常重要的关键字,无论是日常编码、面试还是源码阅读,都离不开对 static 的理解。它可以用来修饰类的成员变量、成员方法、代码块以及内部类,核心作用是将类的成员与对象实例解绑,让其属于类本身。

本文将从 static 的核心概念、四种使用场景、内存机制、使用注意事项以及面试高频考点,全方位带你吃透 Java static 关键字,新手也能轻松掌握。

一、static 关键字核心概念

static 是静态的意思,被 static 修饰的成员(变量、方法、代码块、内部类)统称为静态成员,具有以下核心特点:

  1. 属于类,不属于对象:静态成员随类的加载而创建,不依赖于任何对象实例;
  2. 全局共享:所有对象共享同一个静态成员,修改一处,所有引用处都会生效;
  3. 直接通过类名访问:无需创建对象,可直接用 类名.静态成员 调用(也能用对象调用,但不推荐);
  4. 生命周期:随类加载而初始化,随类卸载而销毁,优先于对象存在。

二、static 的 4 种核心使用场景

1. 静态变量(类变量)

用 static 修饰的成员变量叫静态变量,未被 static 修饰的叫实例变量。

语法:

修饰符 static 数据类型 变量名 = 初始值;

特点:

代码示例:

public class Student {
    // 实例变量:每个对象独有一份
    private String name;
    // 静态变量:所有Student对象共享
    public static String school = "北京大学";

    // 构造方法
    public Student(String name) {
        this.name = name;
    }

    public static void main(String[] args) {
        // 无需创建对象,直接通过类名访问静态变量
        System.out.println(Student.school);

        // 创建两个对象
        Student s1 = new Student("张三");
        Student s2 = new Student("李四");

        // 两个对象共享同一个静态变量
        System.out.println(s1.school); // 北京大学
        System.out.println(s2.school); // 北京大学

        // 修改静态变量,所有对象的school都会改变
        Student.school = "清华大学";
        System.out.println(s1.school); // 清华大学
        System.out.println(s2.school); // 清华大学
    }
}

使用场景:定义全局共享的常量、配置信息(如工具类的默认值、计数变量)。

2. 静态方法(类方法)

用 static 修饰的成员方法叫静态方法,无需创建对象即可调用。

语法:

修饰符 static 返回值类型 方法名(参数列表) { 方法体 }

核心规则(面试必问):

代码示例:

public class StaticMethodDemo {
    // 静态变量
    private static int count = 0;
    // 实例变量
    private String msg = "hello";

    // 静态方法
    public static void addCount() {
        // 正确:静态方法访问静态变量
        count++;
        // 错误:静态方法不能直接访问实例变量
        // System.out.println(msg);
        // 错误:静态方法不能使用this
        // this.count++;
    }

    // 实例方法
    public void show() {
        // 正确:实例方法可以访问静态成员
        System.out.println(count);
        // 正确:实例方法可以访问实例成员
        System.out.println(msg);
    }

    public static void main(String[] args) {
        // 直接通过类名调用静态方法
        StaticMethodDemo.addCount();
        System.out.println(StaticMethodDemo.count); // 1
    }
}

使用场景:工具类方法(如 Arrays.sort ()、Math.random ())、无需依赖对象的通用逻辑。

3. 静态代码块

用 static 修饰的代码块,叫静态代码块,是类加载时自动执行的代码,只执行一次。

语法:

static {
    // 代码逻辑
}

特点:

代码示例:

public class StaticBlockDemo {
    public static String info;

    // 静态代码块:类加载时执行,用于初始化静态资源
    static {
        info = "静态代码块初始化";
        System.out.println("静态代码块执行");
    }

    // 构造方法
    public StaticBlockDemo() {
        System.out.println("构造方法执行");
    }

    public static void main(String[] args) {
        // 第一次创建对象:类加载→静态代码块→构造方法
        new StaticBlockDemo();
        // 第二次创建对象:只执行构造方法(静态代码块只执行一次)
        new StaticBlockDemo();
    }
}

执行结果:

静态代码块执行
构造方法执行
构造方法执行

使用场景:初始化静态变量、加载配置文件、注册驱动(如 JDBC 注册驱动)。

4. 静态内部类

用 static 修饰的内部类,叫静态内部类,是内部类中唯一可以用 static 修饰的类型。

特点:

代码示例:

public class OuterClass {
    private static String outerStatic = "外部类静态变量";
    private String outerInstance = "外部类实例变量";

    // 静态内部类
    public static class StaticInnerClass {
        public void show() {
            // 正确:访问外部类静态成员
            System.out.println(outerStatic);
            // 错误:不能访问外部类实例成员
            // System.out.println(outerInstance);
        }
    }

    public static void main(String[] args) {
        // 直接创建静态内部类对象,无需创建外部类对象
        OuterClass.StaticInnerClass inner = new OuterClass.StaticInnerClass();
        inner.show();
    }
}

使用场景:需要与外部类关联,但又不想依赖外部类对象的场景(如 HashMap 中的 Node 静态内部类)。

三、static 关键字内存机制(重点)

很多新手搞不懂 static,核心是没理解内存分配:

四、static 使用注意事项

五、面试高频考点总结

六、总结

static 关键字的核心就是 **「属于类,共享,不依赖对象」**,记住这一句话,就能吃透所有用法:

日常开发中,static 主要用于工具类、共享常量、初始化配置,掌握它不仅能写出更优雅的代码,还能轻松应对面试中的高频问题。

到此这篇关于Java中static关键字的用法与场景深入理解的文章就介绍到这了,更多相关Java中static关键字用法与场景内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文