Java中的static修饰成员方法

2018-12-06  本文已影响0人  山坡上的斐德洛
/*
* 问题:
*   当创建多个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);


    }
}
上一篇 下一篇

猜你喜欢

热点阅读