Java | static关键字和静态成员

67 阅读3分钟

一、static关键字的作用

static关键字在Java中用于定义类的静态成员,包括静态变量和静态方法。

静态成员属于类,而不是类的实例。这意味着不需要创建类的实例就可以访问静态成员。

demo:

public class Sample {
    // 静态变量
    public static int count = 0;
    // 构造函数,每次创建实例时count增加
    public Sample() {
        count++;
    }
    // 静态方法
    public static void showCount() {
        System.out.println("当前实例数量:" + count);
    }
    public static void main(String[] args) {
        // 不需要创建实例即可调用静态方法
        showCount();  // 输出:当前实例数量:0
        // 创建两个实例
        new Sample();
        new Sample();
        showCount();  // 输出:当前实例数量:2
    }
}

二、静态变量的内存分配

静态变量在内存中只存在一份,不管创建多少个类的实例,静态变量都只有一份拷贝。这与其他非静态成员变量不同,后者在每个实例中都有自己的拷贝。

demo:

public class MemoryAllocation {
    // 静态变量
    public static int staticVar = 10;
    // 非静态变量
    public int instanceVar = 20;
    public static void main(String[] args) {
        MemoryAllocation obj1 = new MemoryAllocation();
        MemoryAllocation obj2 = new MemoryAllocation();
        // 修改静态变量
        obj1.staticVar = 30;
        // 输出obj2的静态变量,显示修改是全局的
        System.out.println("obj2的静态变量:" + obj2.staticVar);  // 输出:obj2的静态变量:30
        // 修改非静态变量
        obj1.instanceVar = 40;
        // 输出obj2的非静态变量,显示修改不影响其他实例
        System.out.println("obj2的非静态变量:" + obj2.instanceVar);  // 输出:obj2的非静态变量:20
    }
}

三、静态方法的特点

静态方法可以直接通过类名调用,不需要创建类的实例。静态方法内部不能直接访问类的非静态成员变量和非静态方法,因为静态方法加载时,类的实例可能还未创建。

demo:

public class StaticMethod {
    public static int staticVar = 10;
    public int instanceVar = 20;
    // 静态方法
    public static void staticMethod() {
        // 不能直接访问非静态成员
        // System.out.println(instanceVar);  // 编译错误
        System.out.println("静态方法可以访问静态变量:" + staticVar);
    }
    public void instanceMethod() {
        System.out.println("非静态方法可以访问静态变量:" + staticVar);
    }
    public static void main(String[] args) {
        // 直接通过类名调用静态方法
        StaticMethod.staticMethod();  // 输出:静态方法可以访问静态变量:10
        // 创建实例以调用非静态方法
        StaticMethod obj = new StaticMethod();
        obj.instanceMethod();  // 输出:非静态方法可以访问静态变量:10
    }
}

四、静态代码块

静态代码块是类中用static关键字定义的代码块,它在类加载时执行,并且只执行一次,通常用于初始化静态变量。

demo:

public class StaticBlock {
    public static int staticVar;
    // 静态代码块
    static {
        System.out.println("静态代码块执行");
        staticVar = 10;
    }
    public StaticBlock() {
        System.out.println("构造函数执行");
    }
    public static void main(String[] args) {
        new StaticBlock();  // 输出:静态代码块执行  构造函数执行
        new StaticBlock();  // 输出:构造函数执行
        // 静态代码块只执行一次
    }
}

以上就是本次分享的所有内容,感兴趣的朋友点个关注呀,感谢大家啦~