25- static关键字

发布时间 2024-01-02 10:12:21作者: 马铃薯1

static关键字:修饰符,可以修饰成员变量

1)被类的所有对象所共享

2)多了一种调用方式,可以通过类名进行调用(更推荐使用类名进行调用)

3)随着类的加载而加载

 

Student01类,该类的school成员变量是非静态的

public class Student01 {
    String name;
    int age;
    String school;
}

Student02类,该类的school成员变量是静态的

public class Student02 {
    String name;
    int age;
    static String school;
}

StudentDemo1类

public class StaticDemo1 {
    /*
    *  static关键字:修饰符,可以修饰成员变量
    *  1.被类的所有对象所共享
    *  2.多了一种调用方式
    *  3.随着类的加载而加载
    *
    * */
    public static void main(String[] args){
        // Student01类,该类的school成员变量是非静态的
        System.out.println("===============Student01类,该类的school成员变量是非静态的==================");
        Student01 s1 = new Student01();
        s1.name = "张三";
        s1.age = 30;
        s1.school = "北京大学";
        System.out.println(s1.name + "\t" + s1.age + "\t" + s1.school); // 张三    30    北京大学

        Student01 s2 = new Student01();
        s2.name = "李四";
        s2.age = 31;
        // s2.school = "北京大学";
        System.out.println(s2.name + "\t" + s2.age + "\t" + s2.school); // 李四    31    null

        // Student02类,该类的school成员变量是静态的
        System.out.println("===============Student02类,该类的school成员变量是静态的==================");
        Student02 s3 = new Student02();
        s3.name = "王五";
        s3.age = 32;
        s3.school = "清华大学";
        System.out.println(s3.name + "\t" + s3.age + "\t" + s3.school); // 王五    32    清华大学

        Student02 s4 = new Student02();
        s4.name = "赵六";
        s4.age = 33;
        // s4.school = "清华大学";
        System.out.println(s4.name + "\t" + s4.age + "\t" + s4.school); // 赵六    33    清华大学


        // 被static修饰的成员变量,可以通过类名进行调用(更推荐使用类名进行调用)
        // 非静态成员变量,必须通过对象名进行调用
        System.out.println("===============被static修饰的成员变量,可以通过类名进行调用==================");
        System.out.println(s3.school); // 清华大学
        System.out.println(Student02.school); // 清华大学

        // 随着类的加载而加载,优先于对象存在
        // 也就是说,静态成员变量,可以在没有对象的情况下进行调用(可以先赋值静态变量,再创建对象)
        System.out.println("===============随着类的加载而加载,优先于对象存在==================");
        Student02.school = "东华理工大学";
        Student02 s5 = new Student02();
        s5.name = "马铃薯";
        s5.age = 26;
        System.out.println(s5.name + "\t" + s5.age + "\t" + s5.school); // 马铃薯    26    东华理工大学
        
    }
}

 

 

static关键字修饰的成员变量,内存图