Java-静态成员变量值到底能不能变??
阅读原文时间:2021年04月20日阅读:1
程序代码::

public class AccessProperty {
    static int i = 6; // 定义静态成员变量
    int n = 0;    

    public static void main(String[] args) { // 定义主方法
        AccessProperty t1 = new AccessProperty(); // 创建一个对象
        AccessProperty t2 = new AccessProperty(); // 创建另一个对象

        t1.n = 100; // 修改 t1 的变量 n 的值 100
        t2.i = 60; // 修改 t2 的变量 i 的值为 60

        // 使用第一个对象调用类成员变量
        System.out.println("第一个实例对象变量i:" + t1.i); // 输出 60
        System.out.println("第一个实例对象变量n:" + t1.n); // 输出 100

        // 使用第二个对象调用类成员变量
        System.out.println("第二个实例对象变量i:" + t2.i); // 输出 60
        System.out.println("第二个实例对象变量n:" + t2.n); // 输出 0
    }
}

运行结果::

第一个实例对象变量i:60
第一个实例对象变量n:100

第二个实例对象变量i:60
第二个实例对象变量n:0

为什么调用对象t2赋值 i = 60。输出t1的成员变量值 i 也变了??而 n 却没有相同效果呢?

------------------------------------------------------分割---------------------------------------------------------

 经过后续学习,对变量有了一定的理解。

java中变量主要分为:局部变量、成员变量,而成员变量又分为实例变量和类变量。

以作用范围从小到达讲解:

  1. 局部变量:在方法内部声明(定义)的变量,只在这个方法内部有效,出了这个方法就无法使用了,可以理解为销毁。比如代码中的 t1 和 t2 ,只在main方法中可用。
  2. 实例变量:成员变量中的实例变量,没有使用static关键字修饰的成员变量,如代码中的变量 n ;他在每一个实例化的对象中都是独立的,每个对象修改其值后,只是修改他自己的这个变量 n ,其他对象的 n 不受影响。用底层的理解就是,每个对象的变量 n 有独立的内存,他们互不影响。
  3. 类变量:成员变量中的类变量,是使用static关键字修饰的成员变量,如代码中的变量 i ;之所以叫做类变量,是因为这个类只有这一个变量 i ,不管实例化多少个对象,他的 i 只有这一个,所以会出现一个对象修改了 i 的值后,其他对象的 i 也跟着变的现象。用底层的理解就是:所有这个类实例化的对象使用的变量 i ,指向的是同一个内存。

以上便是java中基本变量的理解。对于新手来说,还是要多写代码,多去自己思考才能更好的理解。而底层理解,则需要一定程度的经验积累才能真正理解。

顺便说一下常量:使用final关键字修饰的变量就成为了常量。常量的值不可改变。所以如果使用在成员变量上,一般也会加上static关键字,实际工作中是最常见的用法了。如:

static final String version = "1.0.1"