Java 中的 static 关键字

2 阅读2分钟

Java 中的 static 关键字

123

static 是 Java 中的一个关键字,用于修饰类的成员变量、方法、代码块以及内部类。它的主要作用是使这些成员属于类本身,而不是某个具体的对象,从而可以在不创建对象的情况下直接通过类名访问。

静态变量

静态变量(static variables)是属于类的变量,而不是某个对象的变量。它在类加载时初始化,并在整个程序运行期间共享一份内存。

public class Student {

    static String school = "郑州大学"// 静态变量

    String name;

    int age;

    public Student(String name, int age) {

        this.name = name;

        this.age = age;

    }

    public static void main(String[] args) {

        Student s1 = new Student("张三", 18);

        Student s2 = new Student("李四", 20);

        System.out.println(Student.school); // 通过类名访问静态变量

    }

}

静态变量的特点是所有对象共享同一份内存,修改后对所有对象生效。

静态方法

静态方法(static methods)属于类本身,可以直接通过类名调用,而无需创建对象。它不能访问非静态成员,因为非静态成员依赖于具体对象。

public class MathUtils {

    static int add(int a, int b) {

        return a + b; // 静态方法

    }




    public static void main(String[] args) {

        System.out.println(MathUtils.add(5, 3)); // 通过类名调用静态方法

    }

}

静态方法常用于工具类或不依赖对象的逻辑,例如 Math.sqrt()

静态代码块

静态代码块(static block)用于在类加载时执行一次初始化操作,通常用于初始化静态变量或加载配置。

public class Config {

    static String appName;


    static {

        appName = "My Application"// 静态代码块

        System.out.println("静态代码块执行");

    }

    public static void main(String[] args) {

        System.out.println(Config.appName);

    }

}

静态代码块的执行优先于 main 方法,并且只执行一次。

静态内部类

静态内部类(static nested class)是定义在类内部的静态类。它不依赖于外部类的实例,可以直接通过外部类名访问。

public class OuterClass {

    static class InnerClass {

        static void display() {

            System.out.println("静态内部类方法");

        }

    }

    public static void main(String[] args) {

        OuterClass.InnerClass.display(); // 通过外部类名访问静态内部类

    }

}

静态内部类常用于封装逻辑或实现单例模式。

注意事项

  1. 静态变量和方法属于类本身,不能通过 this 关键字访问。
  2. 静态方法不能直接调用非静态成员,但非静态方法可以访问静态成员。
  3. 静态变量在内存中只存在一份,生命周期与类相同。
  4. 静态代码块不能直接访问非静态成员。

通过合理使用 static,可以提高代码的性能和可读性,但滥用可能导致代码难以维护。