变量分为哪些
- 成员变量:类里面,方法外面定义的变量
- 实例变量:没有用static修饰的变量,属于对象;存在期:创建实例~销毁实例;作用域:与该实例的生存范围相同
- 类变量:用static修饰的变量,属于类;存在期:类的准备阶段~销毁该类;作用域:与类的生存范围相同
- 局部变量:
- 形参:方法签名中声明的变量;作用域:整个方法内
- 方法局部变量:方法体内部声明的变量;作用域:定义该变量之处~方法结束
- 代码块局部变量:由花括号括起来的代码块内部声明的变量;作用域:定义该变量之处~代码块结束
- 变量命名:
成员变量
- 在书写类时,不需要将成员变量初始化
- 在类的准备阶段(类变量)或者创建实例(实例变量)时,会进行默认初始化
局部变量
- 形参:在调用方法时,会传入参数,因而不需要初始赋值
- 方法局部变量+代码块局部变量:在使用前,得先给个初始值
- 局部变量只保存基本类型或者对象的引用,所占的内存区域较小
变量的重名
- 成员变量不能重名,即使一个类变量,一个实例变量
- 形参与形参不能重名
- 方法局部变量不能重名
- 形参与方法局部变量不能重名
- 代码块内部的变量只在代码块内部有效,不能与外部的变量重名
- 成员变量与局部变量可以重名,成员变量会被局部变量覆盖;要做区分时,用this.成员变量或者类名.成员变量来访问成员变量
变量的使用规则
- 使用成员变量:
- 用于描述某个类或对象的固有信息;类相关的变量定义为类变量,比如人都有2个眼睛;实例相关的变量定义为实例变量
- 保存某个类或对象的状态信息的变量
- 需要在多个方法间进行共享的变量
- 局部变量:
- 尽可能缩小局部变量的作用范围,在内存中的停留时间越短,性能越好
其他
- 类在使用之前要经过:类加载、类验证、类准备、类解析、类初始化等阶段
- 栈内存中的变量,无序系统垃圾回收,随方法或代码块的运行结束而结束