类变量(static)、成员变量、局部变量
1、定义
类变量(静态变量):声明在类中,方法体之外,但必须声明为static类型。保存在JVM的方法区。当被static静态修饰后,就多了一种调用方式,除了可以被对象调用外。还可以直接被类名调用。类名.静态成员。
成员变量(实例变量):定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。保存在JVM的堆内存
局部变量:在方法中定义,只在方法中有效。局部变量存在于JVM的栈内存中。
public class DemoVariables {
//类变量(带static)
private static int a;
//成员变量
private int b;
//c和d都是局部变量
public void test(int c){
int d;
}
}
2、成员变量与类变量的区别
2.1.生命周期不同
成员变量:随对象的创建而存在,随对象的回收而被释放
类变量:随类的创建而存在,随类的消失而消失
2.2.调用方
成员变量:只能被对象调用,他的作用域是在对象中
类变量:可以被对象调用,也可以被类名调用
2.3、this关键字的使用限制
static静态方法只能访问静态成员,不可以访问非静态成员。静态方法在加载时,优先于对象存在,故而没有办法访问对象中的成员。
静态方法中不能使用this,super关键字。因为this代表对象,而静态在时,有可能没有对象,所以this无法使用。
3、关于并发
只有共享变量才会遇到并发问题,类变量a和成员变量b是共享变量,局部变量c和d是非共享变量。如果需要多线程场景,对于a和b的操作是需要考虑线程安全的,而c和d是不需要考虑的