static静态变量特点:
- 该变量叫做静态变量,被这个类所有对象共享
- 不属于对象,属于类
- 随着类的加载而加载,优先于对象而存在
底层原理解释:
当定义类的时候,方法区会开辟一块类的内存空间,此时堆就会为静态变量开辟一块内存空间。
当创建对象的时候,堆会为对象开辟一块区别于静态变量的独立内存空间,同时对象会记录静态变量的内存地址,而栈则为对象的变量名开辟一块内存空间,同时把对象的地址赋值给该变量的内存空间,当你通过对象调用类中的方法时,方法会被加载进栈,同时该方法的内存空间会记录调用对象的内存空间,当你调用这个方法的时候,方法会通过记录的调用者对象的地址去查询堆中对应对象的成员变量,成员变量再通过记录的静态变量地址查询静态变量的值。
就是由于静态变量有着区别于对象的独立内存空间,当某个对象对静态变量进行修改时,由于所有对象都关联同一块静态变量地址,其他对象再次调用静态变量的时候就会得到被改变了的静态变量值。
调用方式:
- 类名调用(推荐)
- 对象名调用
由以上分析,我们不难得出,我们更推荐使用类名调用静态变量,因为静态变量不属于某一个对象。
