Java - 24 类变量和类方法

Java - 24 类变量和类方法

类变量(静态变量)

非静态变量 = 普通变量 = 实例变量

class Main{
    public static void main(String[] args){
        Child c1 = new Child("wu");
        c1.join();
        c1.count++;
        
        Child c2 = new Child("xin");
        c2.count++;
        
        // 类变量可以通过类名访问
        System.out.println("共有" + Child.count + "个小孩加入了游戏");
    }
}

class Child{
    private String name;
    
    /* ======== */
    public static int count = 0; // 被Child所有对象实例共享
    
    public Child(String name){
        this.name = name;
    }
    public void join(){
        System.out.println(name + "加入了游戏...");
    }
}

类变量内存布局

static变量在哪里?

  • jdk8之前,在堆中class实例的尾部;
  • 在方法区的静态域

static变量在类加载的时候生成

类变量细节

  1. 类变量在类加载时就初始化了,即使没有创建对象,只要类加载了,就可以使用类变量了
  2. 类变量的生命周期随类的加载开始,随类消亡而销毁

类方法(静态方法)

访问修饰符 static 数据返回类型 方法名(){}

类方法的调用

类名.类方法名
对象名.类方法名

使用场景

​ 方法中不涉及到任何和对象相关的成员 (不创建实例也可以调用方法),则可以将方法设计成静态方法,提高开发效率

类方法细节

  1. 类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区
  2. 类方法中 不能使用和对象有关的关键字,比如: this 和 super
  3. 类方法中,只能访问静态变量和静态方法
class Person{
    private static int total = 0;
    private static void setTotalPerson(int total){
        Person.total = total; // 不是this.total = total;
    }
}

static修饰代码块

static{

}

类被加载时自动执行,只执行一次
可以在一个地方集中处理静态变量的初始化,增强代码的可读性和管理性
具体见 Java - 26

posted @ 2024-10-31 16:04  wajiez  阅读(28)  评论(0)    收藏  举报