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);
}
}
访问自己类中的类变量,是否可以省略类变量不写呢?
可以的。
注意:在某个类中访问其他类里的类变量,必须带类名访问。