Java 中的 static 关键字
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(); // 通过外部类名访问静态内部类
}
}
静态内部类常用于封装逻辑或实现单例模式。
注意事项
- 静态变量和方法属于类本身,不能通过 this 关键字访问。
- 静态方法不能直接调用非静态成员,但非静态方法可以访问静态成员。
- 静态变量在内存中只存在一份,生命周期与类相同。
- 静态代码块不能直接访问非静态成员。
通过合理使用 static,可以提高代码的性能和可读性,但滥用可能导致代码难以维护。