2.4 变量

2.4.1 变量的本质

变量(variable):在程序运行过程中,其值可以发生改变的量。
变量本质上就是代表一个“可操作的存储空间”,空间位置是确定的,但是里面放置什么值不确定。我们可通过变量名来访问“对应的存储空间”,从而操纵这个“存储空间”存储的值。
Java 是一种强类型语言,每个变量都必须声明其数据类型。变量的数据类型决定了变量占据存储空间的大小。 比如,int a = 3; 表示 a 变量的空间大小为 4 个字节。
变量作为程序中最基本的存储单元,其要素包括变量名,变量类型和作用域。变量在使用前必须对其声明, 只有在变量声明以后,才能为其分配相应长度的存储空间。

2.4.2 变量的定义格式

1
type varName [=value][,varName[=value]...];
2
// []中的内容为可选项,即可有可无
3
数据类型 变量名 [=初始值] [,变量名 [=初始值]];
Copied!
  • 格式一:
    1
    数据类型 变量名 = 初始化值; // 声明变量并赋值
    2
    int age = 18;
    Copied!
  • 格式二
    1
    // 先声明,后赋值(使用前赋值即可)
    2
    数据类型 变量名;
    3
    变量名 = 初始化值;
    4
    double money;
    5
    money = 55.5;
    Copied!
  • 格式三,不提倡这种“一行声明多个变量”风格,逐一声明每一个变量可以提高程序可读性。
    1
    int a = 10, b = 20; // 定义 int 类型的变量 a 和 b,中间使用逗号隔开
    2
    int c, d; // 声明int类型的变量 c 和 d,中间使用逗号隔开
    3
    c = 30;
    4
    d = 40;
    Copied!
不同数据类型的常量会在内存中分配不同的空间,如图所示。
1
double salary;
2
long earthPopulation;
3
int age;
Copied!
Could not load image

2.4.3 注意事项

  • 每个变量都有类型,类型可以是基本类型,也可以是引用类型。
  • 变量名必须是合法的标识符
  • 变量声明是一条完整的语句,因此每一个声明都必须以分号结束
  • 变量在使用之前,必须初始化(赋值)。
  • 定义 long 类型的变量时,需要在整数的后面加 L(大小写均可,建议大写)。因为整数默认是 int 类型,整数太大可能超出 int 范围。
  • 定义 float 类型的变量时,需要在小数的后面加 F(大小写均可,建议大写)。因为浮点数的默认类型是 double, double 的取值范围是大于 float 的,类型不兼容。
  • 在同一对花括号中,变量名不能重复。

2.4.4 变量的分类

从整体上可将变量划分为局部变量、成员变量(也称为实例变量)和静态变量。
类型
声明位置
从属于
生命周期
局部变量
方法或语句块内部
方法/语句块
从声明位置开始,直到方法或语句块执行完毕,局部变量消失;
成员变量(实例变量)
类内部,方法外部
对象
对象创建,成员变量也跟着创建。对象消失,成员变量也跟着消失;
静态变量(类变量)
类内部,static 修饰
类被加载,静态变量就有效;类被卸载,静态变量消失。
成员变量和静态变量不是目前重点,不要过多纠结理解与否。当学习到面向对象时,会深入理解成员变量和静态变量
  • 局部变量(local variable)
    方法或语句块内部定义的变量。生命周期是从声明位置开始到到方法或语句块执行完毕为止。局部变量在使用前必须先声明、初始化(赋初值)再使用。
    1
    public void test() {
    2
    int i;
    3
    int j = i + 5 ; // 编译出错,变量i还未被初始化
    4
    }
    5
    6
    public void test() {
    7
    int i;
    8
    i = 10;
    9
    int j = i + 5 ; // 编译正确
    10
    }
    Copied!
  • 成员变量(实例变量 member variable)
    方法外部、类的内部定义的变量。从属于对象,生命周期伴随对象始终。如果不自行初始化,它会自动初始化成该类型的默认初始值。
    数据类型
    实始值
    int
    0
    double
    0.0
    char
    '\u0000'
    boolean
    false
    1
    public class Test {
    2
    int i;
    3
    }
    Copied!
  • 静态变量(类变量 static variable)
    使用 static 定义。 从属于类,生命周期伴随类始终,从类加载到卸载。如果不自行初始化,与成员变量相同会自动初始化成该类型的默认初始值。