- Java变量
一、根据声明方式来分类(7种)
成员变量(fields):声明在class之内,method之外
1. 实例变量(Instance Variables, Non-Static Fields):不用static声明,实例变量的值依实例的不同而不同。它随对象的产生而产生,随对象的销亡而销亡。
2. 类变量(Class Variables, Static Fields):由static声明的域(field),static告诉编译器无论这个类被实例化了多少次,这个变量的一个副本都确切存在。另外,可以再加上final指示常量(值用不可变)。
3. 狭义的局部变量(Local Variables):声明在method (或block) 中的变量,作用域局限于其中,存储method的临时状态。系统不自动分配局部变量的初值。
参数(Parameters)
4. method parameter: 声明于method小括号中的变量;
5. constructor parameter:声明于constructor小括号中的变量;
6. expection-hander parameter: 声明于catch小括号中的变量。
7. 数组元素(array elements):没有识别名称,必须通过数组名和索引值来识别,例如a[0]。
二、根据变量内存来分类(2种)
1. heap variable: 占用的内存在heap中,包括class variable, instance variable, array element, 这类变量会自动被JVM初始化成默认值。
2. stack variable: 通称广义的局部变量(pan-local variable),占用的内存在stack中,这类变量包括了狭义的局部变量和参数类变量。狭义的局部变量不会被JVM初始化成默认值,使用者必须自行初始化该变量,但是参数类变量会被JVM初始化为传入值。
三、根据使用方式来分类(3种)
1. class variable
2. instance variable
3. 广义的局部变量:包括狭义的局部变量和参数类变量
至于“数组元素”,没有必要为它多分出一类。我们通常将数组视为“对象”,将数组元素视为对象的instance variable.
!在Java中不一定要在类定义的一开始就声明变量(尽管大部分情况下是这么做的),只要在变量使用前声明就可以了。