变量的分类
从整体上可将变量划分为局部变量、成员变量(也称为实例变量)和静态变量。
表2-2局部变量、成员变量、静态变量的区别 |
|||
类型 |
声明位置 |
从属于 |
生命周期 |
局部变量 |
方法或语句块内部 |
方法/语句块 |
从声明位置开始,直到方法或语句块执行完毕,局部变量消失 |
成员变量 (实例变量) |
类内部,方法外部 |
对象 |
对象创建,成员变量也跟着创建。对象消失,成员变量也跟着消失; |
静态变量 (类变量) |
类内部,static修饰 |
类 |
类被加载,静态变量就有效;类被卸载,静态变量消失。
|
· 局部变量(local variable)
方法或语句块内部定义的变量。生命周期是从声明位置开始到到方法或语句块执行完毕为止。局部变量在使用前必须先声明、初始化(赋初值)再使用。
public void test() { int i; int j = i+5 ; // 编译出错,变量i还未被初始化 } public void test() { int i; i=10; int j = i+5 ; // 编译正确 }
· 成员变量(也叫实例变量 member variable)
方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终。如果不自行初始化,它会自动初始化成该类型的默认初始值。
表2-3实例变量的默认初始值 |
|
数据类型 |
实始值 |
int |
0 |
double |
0.0 |
char |
‘\u0000’ |
boolean |
false
|
public class Test { int i; }
· 静态变量(类变量 static variable)
使用static定义。 从属于类,生命周期伴随类始终,从类加载到卸载。 (注:讲完内存分析后我们再深入!先放一放这个概念!)如果不自行初始化,与成员变量相同会自动初始化成该类型的默认初始值
public class LocalVariableTest { public static void main(String[ ] args) { boolean flag = true; // 声明boolean型变量并赋值 char c1, c2; // 声明char型变量 c1 = '\u0041'; // 为char型变量赋值 c2 = 'B'; // 为char型变量赋值 int x; // 声明int型变量 x = 9; //为int型变量赋值 int y = x; // 声明并初始化int型变量 float f = 3.15f; // 声明float型变量并赋值 double d = 3.1415926; //声明double型变量并赋值 } }