Java 零基础教程

Java 变量声明与初始化

1. 理解变量声明 (Variable Declaration)

变量声明,本质上就是在内存中为数据命名并分配一个存储空间,同时指定这个空间能存放什么类型的数据。在 Java 中,你必须先声明一个变量,然后才能使用它。这就像是在往架子上放东西之前,先在架子上预留出一个空位并贴上标签。声明过程告诉了编译器变量的名称以及它将存储的数据类型。

在 Java 中声明变量的通用语法是:

dataType variableName;
  • dataType (数据类型): 指定该变量将存储的数据种类。常见的例子包括 int(整数)、double(浮点数)、boolean(真/假值)以及 String(文本字符串)。关于基本数据类型的完整列表,请参考上一章。
  • variableName (变量名): 这是你给变量起的名字。变量名应该具有描述性,并且遵循特定的命名规范(下文会详细说明)。

代码示例:

int age;           // 声明了一个名为 'age' 的整数 (int) 变量
double price;      // 声明了一个名为 'price' 的双精度浮点数 (double) 变量
boolean isStudent; // 声明了一个名为 'isStudent' 的布尔 (boolean) 变量
String name;       // 声明了一个名为 'name' 的字符串 (String) 变量

1.1 变量命名规范

选择有意义且一致的变量名对于代码的可读性和可维护性至关重要。Java 对变量命名有以下严格的规则和约定:

  • 必须以字母、下划线 (_) 或美元符号 ($) 开头: 尽管技术上允许使用美元符号,但在标准的变量名中通常会避免使用它。
  • 不能以数字开头: 例如 int 1stPlace; 是无效的声明,会报错。
  • 可以包含字母、数字、下划线和美元符号: 在首字符之后,你可以使用这些字符的任意组合。
  • 严格区分大小写ageAgeJava 中会被视为两个完全不同的变量。
  • 不能是 Java 关键字: 你不能把变量命名为 classintpublic 等系统保留字。
  • 使用小驼峰命名法 (camelCase): 这是最通用、最推荐的行业规范。首字母小写,随后每个单词的首字母大写(例如:firstNamestudentAgetotalAmount)。

有效的变量名:

int studentAge;
double itemPrice;
String userName;
boolean isValidInput;
int _count;  // 有效,但不太常见
int $amount; // 有效,但通常应避免使用

无效的变量名:

int 1stPlace;   // 无效:以数字开头
int my-age;     // 无效:包含了连字符(减号)
int class;      // 无效:'class' 是 Java 关键字

1.2 声明多个变量

你可以在同一行中声明多个相同数据类型的变量,中间用逗号分隔:

int x, y, z;    // 声明了三个整数变量:x, y 和 z
double a, b, c; // 声明了三个双精度浮点数变量:a, b 和 c

虽然这种写法是允许的,但通常我们更推荐每行只声明一个变量(特别是当你要初始化它们时),因为这样代码的可读性更好。

2. 理解变量初始化 (Variable Initialization)

变量初始化,指的是在变量声明之后,首次给它赋予一个初始值的过程。如果不进行初始化,变量会持有一个取决于其数据类型的默认值(例如,int 为 0,double 为 0.0,booleanfalse,引用类型如 Stringnull)。

然而,依赖这些默认值是非常糟糕的编程习惯。显式地初始化你的变量,能让你的代码行为更可预测,也更容易让人看懂。

初始化的语法如下:

variableName = value;
  • variableName: 你之前声明过的变量名。
  • =: 赋值运算符。它的作用是将右边的值赋给左边的变量。
  • value: 你想赋给变量的初始值。这个值必须与变量声明时的数据类型相匹配。

代码示例:

int age;
age = 25;         // 将 25 赋值给变量 'age'

double price;
price = 19.99;    // 将 19.99 赋值给变量 'price'

boolean isStudent;
isStudent = true; // 将 true 赋值给变量 'isStudent'

String name;
name = "Alice";   // 将 "Alice" 赋值给变量 'name'

2.1 声明与初始化合并(一步到位)

你可以将声明和初始化合并为一条简洁的语句:

dataType variableName = value;

这是日常开发中最常用、最受推崇的写法,因为它让代码更加紧凑。

代码示例:

int age = 25;
double price = 19.99;
boolean isStudent = true;
String name = "Alice";

2.2 使用表达式进行初始化

你也可以使用表达式(数学运算或逻辑运算的结果)来初始化变量,只要该表达式的最终计算结果与变量的数据类型兼容即可。

代码示例:

int x = 10;
int y = x + 5;       // 用表达式计算出 15 (10 + 5),并赋值给 'y'

double radius = 5.0;
double area = 3.14159 * radius * radius; // 用圆的面积计算公式初始化 'area'

3. 初始化的重要性

在使用变量之前忘记初始化,是导致程序出错的常见原因。Java 编译器非常严格:局部变量(在方法内部声明的变量)在被使用前必须被初始化。否则,编译器会直接报错拒绝编译。

public class Example {
    public static void main(String[] args) {
        int number; // 变量已声明,但未初始化
        
        // System.out.println(number); // 如果取消这行的注释,会导致编译错误
        
        number = 10; // 现在它被初始化了
        System.out.println(number); // 这行代码现在可以正确运行并输出 10
    }
}

在这个例子中,被注释掉的那行代码会引发编译错误,因为 number 在被赋予具体数值之前就被尝试打印了。在使用前给它赋值就能完美解决这个问题。

4. 最佳实践总结

  • 声明时即刻初始化: 养成在声明变量的同时就给它赋初始值的习惯,这能有效避免很多低级错误。
  • 使用有意义的变量名: 名字要能准确反映该变量的用途(例如用 totalScore 而不是 ts)。
  • 严格遵守命名规范: 坚持使用小驼峰命名法 (camelCase),这能让你的代码看起来非常专业,也便于团队协作。
  • 避免无用的变量: 不要声明那些你在代码中根本用不到的变量。
  • 缩小变量的作用域: 尽量在最小的可用范围内声明变量(比如只在需要用到它的 for 循环内部声明)。我们将在后续模块中深入探讨“作用域 (Scope)”的概念。