Java中成员变量和局部变量的区别

317 阅读2分钟

类的成员之一:属性

1.变量的分类:

  • 角度一:按照数据类型来分:基本数据类型(8种)、引用数据类型(数组、类、接口、枚举、注解、记录)
  • 角度二:按照变量在类中声明的位置的不同:成员变量(或属性)、局部变量(方法内、方法形参、构造器内、构造器形参、代码块内等)
  1. 属性的几个称谓:成员变量、属性、field(字段、域)

  2. 区分成员变量 vs 局部变量

image.png

image.png

3.1 相同点:

变量声明的格式相同:数据类型 变量名 = 变量值
变量都有其有效的作用域。出了作用域,就失效了。
变量必须先声明,后赋值,再使用。

3.2 不同点:
① 类中声明的位置的不同:
属性:声明在类内,方法外的变量
局部变量:声明方法、构造器内部的变量

② 在内存中分配的位置不同(难):
属性:随着对象的创建,存储在堆空间中。
局部变量:存储在栈空间中

③ 生命周期:
属性:随着对象的创建而创建,随着对象的消亡而消亡。
局部变量:随着方法对应的栈帧入栈,局部变量会在栈中分配;随着方法对应的栈帧出栈,局部变量消亡。

④ 作用域:
属性:在整个类的内部都是有效的
局部变量:仅限于声明此局部变量所在的方法(或构造器、代码块)中

⑤ 是否可以有权限修饰符进行修饰:(难)
都有哪些权限修饰符:public、protected、缺省、private。(用于表明所修饰的结构可调用的范围的大小)

属性,是可以使用权限修饰符进行修饰的。 暂时还未讲封装性,所以大家先不用写任何权限符。
而局部变量,不能使用任何权限修饰符进行修饰的。

⑥ 是否有默认值:(重点)
属性:都有默认初始化值
意味着,如果没有给属性进行显式初始化赋值,则会有默认初始化值。

局部变量:都没有默认初始化值。
意味着,在使用局部变量之前,必须要显式的赋值,否则报错。

注意:对于方法的形参而言,在调用方法时,给此形参赋值即可。