Java语言中根据定义变量位置的不同,可以将变量分为两大类:成员变量和局部变量。两种变量运行机制存在较大差异,这里首先谈谈成员变量。
首先要认识到,成员变量指的是在类里面定义的变量,只要是一个合法的标识符即可。成员被分成两种:有static修饰的为类变量,没有static修饰的则为实例变量。
类变量比实例变量的生存周期要长,可以从该类的准备阶段起开始存在,直到系统完全销毁这个类。而实例变量则从该类的实例被创建起开始存在,直到系统完全销毁这个实例,类的实例肯定会比类的生存周期要短,所以类变量比实例变量的生存周期要长。
下面通过代码感受下两种变量的区别
public class Test {
public static void main(String[] args){
System.out.println("Person中类变量eyeNum初始化的值+"+Person.eyeNum);
//此时输出值为0(默认的)
Person p = new Person();
System.out.println("Person中实例变量name初始化的值+"+p.name);
//此时输出值为null(默认的)
//为两种变量直接赋值
Person.eyeNum=2;
p.name="库里";
System.out.println("Person中类变量eyeNum赋值后的值+"+Person.eyeNum);
System.out.println("Person中实例变量name赋值后的值+"+p.name);
//上面的输出值分别为2和库里
//通过person对象访问eyeNum的值
System.out.println("通过person对象访问eyeNum的值+"+p.eyeNum);
Person p2 = new Person();
System.out.println("新创建的实例能否访问上一个实例的值+"+p2.name);
//不能访问但编译能够通过,此时的值为null
System.out.println("新创建的实例能否访问上一个类变量的值+"+p2.eyeNum);
//此时输出值为2,证明了类变量存在着,上个实例变量已然销毁
}
}
class Person {
//创建一个类变量
public static int eyeNum;
//创建一个实例变量
public String name;
}
网友评论