一个类里不能定义两个重名的成员变量
java允许局部变量和成员变量名称相同,如果方法里的局部变量和成员变量相同,局部变量会覆盖成员变量,这时可以通过如下语法访问成员变量
//类Field
类名.变量名
//实例Field
this.变量名
成员变量
系统加载类或者创建该类的实例时会自动为类Field分配内存空间并自动为成员变量指定初始值。
实例Field是在创建实例时分配内存空间并指定初始值的。
成员变量是在堆内存中的
成员变量指的是在类范围内定义的变量,也就是Field;
- 用static修饰的成员变量属于类,称为类Field
- 没有用static修饰的成员变量属于实例化该类的实例
类Field
类Field的生命周期和该类相同。
在程序中通过如下语法访问类Field
类名.类Field名
也可以通过实例访问类Field
实例名.类Field名
由于类Field属于类而不属于实例,当其他实例修改类Field值时,所有类实例获取到的类Field的值都会被改变。
实例Field
实例Field的生命周期和该实例的声明周期相同
实例Field的访问语法如下
实例名().实例Field名
局部变量
局部变量定义后必须显式初始化之后才能使用,这意味着定义一个局部变量后系统并没有给这个变量分配内存空间,在显示初始化值之后才会给该变量分配内存空间并将值存入内存。
局部变量总是保存在其所在方法的栈内存中
局部变量根据定义形式不同被分为三类
- 形参
在定义方法签名时定义的变量,作用于在整个方法中有效 - 方法局部变量
在方法体内部定义的变量,作用域从定义该变量的地方生效,到方法结束时失效 - 代码块局部变量
在代码块中定义的变量,作用域从定义变量的地方生效,到代码块结束时失效