变量按照声明的位置不同 , 分为成员变量和局部变量 ;

成员变量(属性) :

成员变量是在类中方法之外定义的变量 ;
也是一个类的属性 ;

局部变量(方法) :

局部变量是在方法内部定义的变量 ;
并且只能在当前方法内使用 ;
方法的参数也算局部变量 ;
image.png
public void demo(int num){ //方法的参数也算当前方法的局部变量 ;
public void fn( ){
int a ;
System.out.println(a); //报错 a的变量还未初始化
//因为局部变量没有初始值 在使用之前必须手动的完成初始化 , 未声明则报错;

成员变量与局部变量的区别 :

① 在类中的位置不同 :
· 成员变量在类中的方法之外定义 ;
·局部变量在类中的方法内部或者方法声明上定义 ;
(所谓方法声明上指的是方法参数);

② 内存中的位置不同
· 成员变量在堆内存中(是存储在对象对应的堆内存中) ;
· 局部变量在栈内存中 ; //因为方法是存储在全局方法区 ;
//所以方法里面的变量被淋湿存储在栈内存当中;
生命周期不同
·成员变量随着对象的存在而存在,随着对象的消失而消失
//对象在成员变量(属性)在;对象消失成员变量消失;
·局部变量随着方法的调用而存在,
随着方法的调用完毕而消失;
因此可得 :
成员变量生命周期很长;
局部变量生命周期很短;
④ 初始化不同
成员变量有初始化值;
局部变量没有初始化值;//需要手动初始化
⑤ 对象的属性是存储在对象的地址堆内存中
因为每个对象的属性值不一样,所以分开存储
但是方法每个对象都是一样
所以没必要在每个堆内存中存一份
所以方法是存储在第三块内存 : 全局方法区
5.20.1 成员变量和局部变量区别与使用 - 图2