一、 成员变量和局部变量的比较
1.代码层面
定义位置不同
局部变量:定义在方法中或者方法声明的参数
成员变量:定义在类中方法外
2.内存层面
空间不同
局部变量:属于方法,和方法的位置相同,在栈内存中
成员变量:属于对象,和对象的位置相同,在堆内存中
3.内存层面
生命周期不同
局部变量:随着方法的调用而存在,随着方法的结束而消失
成员变量:随着对象的创建而存在,随着对象的消失而消失
4.初始状态不同
局部变量:没有默认的初始值,必须先手动赋值,才可以调用
成员变量:有默认的初始化
二、静态变量和非静态变量的区别
1.所属类型不同
静态变量:属于类,类变量
非静态变量:属于对象
2.内部存储位置不同
静态变量:存储在字节码中,存储在方法区中
非静态变量:依赖于对象,存储在堆内存中
3.生命周期不同
静态变量:属于类,所以生命周期和类相同,随着类的加载而存在,随着类的消失而消失
非静态变量:属于对象,所以生命周期和对象相同,随着对象的创建而存在,随着对象的消失而消失
4.访问方式不同
非静态变量:只能通过对象名访问
静态变量:既可以通过对象名访问,也可以使用类名来访问
类名.静态变量名;
类名.静态方法名();