局部变量和成员变量的区别
1、定义的位置
成员变量: 在类体内部,方法体外面
局部变量: 在方法体内部
2、作用范围
成员变量的作用范围: 整个类
局部变量的作用范围: 方法体
3、初始化值
成员变量: 有默认值
局部变量: 没有默认值 (必须先定义,赋值,最后使用)
4、内存的位置
成员变量:位于堆内存
局部变量:位于栈内存
在Person p1 =new Person()创建对象后,初始化数据如下图:
给属性赋值!并创建第二个对象
详细说明:
*局部变量必须经过显示初始化之后才能使用,系统不会为局部变量执行初始化。定义了局部变量以后,系统并没有给局部变量进行初始化,直到程序给这个局部变量赋给初值时,系统才会为这个局部变量分配内存空间,并将初始值保存到这块内存中。
*局部变量不属于任何类或者实例,因此它总是保存在方法的栈内存中。如果局部变量是基本数据类型,则该变量直接存储在方法的栈内存中,如果是引用变量则将引用的地址存储在方法的栈内存中。
*栈内存中的变量无需系统垃圾回收,随着方法或者代码块的运行结束而结束。局部变量通常只保存了具体的值或者引用地址,所以所占的内存比较小。
5、生命周期 局部变量:随着方法调用而诞生,随着方法的调用完毕而消失,出栈而消亡. 成员变量:随着对象创建而诞生,随着对象的消失而消失,GC回收而消亡.
注意事项:
- 局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。
- 基本数据类型变量包括哪些:byte,short,int,long,float,double,boolean,char
- 引用数据类型变量包括哪些:数组,类,接口,枚举