5.3 成员变量和局部变量 5.3.1 成员变量和局部变量是什么

5.3 成员变量和局部变量 5.3.1 成员变量和局部变量是什么

Java语言中变量分成:成员变量局部变量两大类。
成员变量指的是在类里定义的变量;
**局部变量指的是在方法里定义的变量**。

变量命名规则

  • 从语法角度来看,只要是一个合法的标识符即可;
  • 但从程序可读性角度来看,应该是多个有意义的单词连缀而成,其中第一个单词首字母小写,后面每个单词首字母大写。

Java程序中的变量划分

这里有一张图片

成员变量分类

成员变量被分为类变量实例变量两种,定义成员变量时没有static修饰的就是实例变量,static修饰的就是类变量

成员变量的作用域

  • 类变量从该类的准备阶段起开始存在,直到系统完全销毁这个类时,类变量的作用域与这个类的生存范围相同;
  • 实例变量则从该类的实例被创建起开始存在,直到系统完全销毁这个实例时,实例变量的作用域与对应实例的生存范围相同。

如何访问成员变量

  • 只要类存在,程序就可以通过类.类变量的方式访问该类的类变量。
  • 只要实例存在,程序就可以通过实例.实例变量的方式访问该实例的实例变量。
  • 类变量也可以让该类的实例通过实例.类变量来访问。这与通过该类来修改类变量的结果完全相同。

成员变量的默认初始化

成员变量无须显式初始化,只要为一个类定义了类变量或实例变量,系统就会在这个类的准备阶段或创建该类的实例时进行默认初始化,成员变量默认初始化时的赋值规则与数组动态初始化时数组元素的赋值规则完全相同。

局部变量分类

局部变量根据定义形式的不同,又可以被分为如下三种。

  1. 形参:在定义方法签名时定义的变量,形参的作用域在整个方法内有效
  2. 方法局部变量:在方法体内定义的局部变量,它的作用域是从定义该变量的地方生效,到该方法结束时失效。
  3. 代码块局部变量:在代码块中定义的局部变量,这个局部变量的作用域从定义该变量的地方生效,到该代码块结束时失效。

局部变量中只有形参会默认初始化

与成员变量不同的是,局部变量除形参之外,都必须显式初始化。也就是说**,必须先给方法局部变量和代码块局部变量指定初始值,否则不可以访问它们**。
形参的作用域是整个方法体内有效,而且形参也无须显式初始化,形参的初始化在调用该方法时由系统完成,形参的值由方法的调用者负责指定

当通过类或对象调用某个方法时,系统会在该方法栈区内为所有的形参分配内存空间,并将实参的值赋给对应的形参,这就完成了形参的初始化。

合法的同名变量规则

在同一个类里,成员变量的作用范围是整个类内有效,一个类里不能定义两个同名的成员变量,即使一个是类变量,一个是实例变量也不行;
一个方法里不能定义两个同名的方法局部变量,方法局部变量形参也不能同名;
同一个方法中不同代码块内的代码块局部变量可以同名:如果先定义代码块局部变量,后定义方法局部变量,前面定义的代码块局部变量与后面定义的方法局部变量也可以同名。

局部变量可以和成员变量同名

同名局部变量覆盖成员变量

Java允许局部变量和成员变量同名,如果方法里的局部变量和成员变量同名,局部变量会覆盖成员变量。

通过this或类名来调用被覆盖的成员变量

如果需要在这个方法里引用被覆盖的成员变量,则可使用this(对于实例变量)或类名(对于类变量)作为调用者来限定访问成员变量