/*
* 问题:
* 当创建多个Person类时,如果人的国家都是中国,那么这个会占用大量
* 内存,country变量存在大量重复,所以这里要使用static修饰
*
* static关键字的使用:
* 1【重点】. 如果使用static修饰的成员变量,这些成员称之为【静态成员变量】,
* 这个【静态成员变量】实际存放的内存空间在【内存数据区】。【静态成员变量】
* 和当前【类对象的内存】没有任何关系,这个【静态成员变量】的内存空间不在【堆区】
* 对象内存中
*
* 2. 用static修饰的成员变量,这个【静态成员变量】可以提供给多个类对象使用
*
* 3. 什么时候使用static, 真正意义上存在大量重复,并且存在一定共享基础的数据。这种
* 情况下,可以使用static修饰
*
* 发现:
* 发现通过类对象来调用【静态成员变量】,报警告
* 用static修饰【静态成员变量】应该用【静态】的方式访问
*
* 【重点】
* 用static修饰的成员变量,这个成员变量会【早于】类对象的创建而创建,而且【晚于】类对象
* 的销毁而销毁。
* 所以用static修饰的【静态成员变量】是和类对象“无关的”
*
* 严格来说
* 类对象和【静态成员变量】无关,那么调用类对象来调用【静态成员变量】是“非法的”
* java期望的是,使用更加严谨的调用方式。
*
* 【推荐调用/使用成员变量的方式】
* 类名.成员变量;
* */
class Person{
// 成员变量, 内存一般是放到堆区的
private String name;
// 这里是用static修饰的成员变量,内存就放到了数据区
static String country = "中国";
public Person(){}
public Person(String name){
this.name = name;
}
// getter和setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class learn_static {
public static void main(String[] args) {
Person p1 = new Person("叶问");
Person p2 = new Person("陈华顺");
Person p3 = new Person("陈真");
Person p4 = new Person("李云龙");
System.out.println("p1.country: " + p1.country);
System.out.println("p1.country: " + p2.country);
// 这个调用方式报警告了
// p3.country = "People Republic of China";
// 推荐使用这个方式调用
Person.country = "People Republic of China";
System.out.println("p1.country: " + p3.country);
System.out.println("p1.country: " + p4.country);
}
}
网友评论