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关键字修饰的成员变量,内存图