static:
叫静态,可以修饰成员变量、成员方法。
成员变量按照有无static修饰,分为两种:
类变量:有static修饰,属于类,在计算机中只有一份,会被类的全部对象共享。静态成员变量。
实例变量(对象的变量):无static修饰,属于每个对象。
类名.类变量(推荐)
对象.类变量(不推荐)
Student类:
package cn.ensource.d1_staticdemo;public class Student {// 类变量static String name;// 实例变量(对象变量)int age;
}
Test类:
package cn.ensource.d1_staticdemo;public class Test {public static void main(String[] args) {// 目标:掌握有无static修饰成员变量的用法、特点// 1. 类变量的用法Student.name = "袁华";Student s1 = new Student();s1.name = "马东梅";Student s2 = new Student();s2.name = "秋雅";System.out.println(s1.name); // 秋雅System.out.println(Student.name);s1.age = 23;s2.age = 18;System.out.println(s1.age);System.out.println(s2.age);}
}
成员变量执行原理:
类变量直接放在堆内存中。
类变量:属于类,与类一起加载一次,在堆内存中只有一份,可以被类和类的所有对象共享。
实例变量:属于对象,每个对象都有一份,只能用对象访问。
类变量的应用场景:
在开发中,如果某个数据只需要一份,且希望能够被共享(访问、修改),则该数据可以定义类变量来记住。
案例导学:
系统启动后,要求用户类可以记住自己创建了多少个用户对象了。
package cn.ensource.d1_staticdemo;public class User {public static int number; // 类变量对外公开,方便别人访问public User() {
// User.number++;// 注意:在同一个类中,访问自己的类变量number++;}
}
package cn.ensource.d1_staticdemo;public class Test2 {public static void main(String[] args) {// 目标:通过案例理解类变量的应用场景User user1 = new User();User user2 = new User();User user3 = new User();System.out.println(User.number);User user4 = new User();System.out.println(User.number);}
}
访问自己类中的类变量,是否可以省略类变量不写呢?
可以的。
注意:在某个类中访问其他类里的类变量,必须带类名访问。