1. 什么是变量?
在 Java 编程中,变量是存储数据值的基本单元。你可以把变量想象成一个有名字的盒子,用来存放各种类型的数据,比如数字、文本、对象等。每个变量都有三个核心属性:
- 数据类型:决定变量能存储什么种类的数据
- 变量名:用于在代码中引用该变量的标识符
- 变量值:实际存储在变量中的数据
2. 变量的声明与初始化
在 Java 中,使用变量前必须先声明。声明变量的基本语法如下:
java
// 声明变量
数据类型 变量名;
// 声明并初始化
数据类型 变量名 = 初始值;
2.1 声明示例
java
// 声明整数变量
int age;
// 声明并初始化字符串变量
String name = "张三";
// 声明多个同类型变量
double price, discount, total;
3. Java 变量的数据类型
Java 是强类型语言,每个变量都必须有明确的数据类型。主要分为两大类:
3.1 基本数据类型(Primitive Types)
| 类型 | 大小 | 取值范围 | 示例 |
|---|---|---|---|
| byte | 8位 | -128 ~ 127 | byte b = 100; |
| short | 16位 | -32,768 ~ 32,767 | short s = 1000; |
| int | 32位 | -2³¹ ~ 2³¹-1 | int i = 100000; |
| long | 64位 | -2⁶³ ~ 2⁶³-1 | long l = 100000L; |
| float | 32位 | 约 ±3.4e-38 ~ 3.4e+38 | float f = 3.14f; |
| double | 64位 | 约 ±1.7e-308 ~ 1.7e+308 | double d = 3.14159; |
| char | 16位 | Unicode 字符 | char c = 'A'; |
| boolean | 1位 | true 或 false | boolean flag = true; |
3.2 引用数据类型(Reference Types)
- 类(Class):如 String、Scanner、自定义类
- 接口(Interface)
- 数组(Array)
java
// 引用类型示例
String str = "Hello World";
int[] numbers = {1, 2, 3, 4, 5};
Scanner scanner = new Scanner(System.in);
4. 变量的命名规则
Java 变量命名必须遵循以下规则:
- 必须以字母、下划线(_)或美元符号($)开头
- 后续字符可以是字母、数字、下划线或美元符号
- 不能使用 Java 关键字(如 int、class、public 等)
- 区分大小写(age 和 Age 是不同的变量)
- 建议使用驼峰命名法(camelCase)
4.1 命名示例
java
// 合法的变量名
int age;
String firstName;
double _price;
boolean $isValid;
int MAX_COUNT = 100; // 常量通常用全大写
// 不合法的变量名
int 123abc; // 不能以数字开头
double class; // class 是关键字
String first-name; // 不能包含连字符
5. 变量的作用域
变量的作用域决定了它在代码中的可见范围:
5.1 局部变量(Local Variables)
在方法、构造函数或代码块内部声明的变量:
java
public void calculate() {
int result = 0; // 局部变量,只在 calculate 方法内有效
// ...
}
5.2 实例变量(Instance Variables)
在类中但在方法外声明的变量,属于对象实例:
java
public class Student {
String name; // 实例变量
int age; // 实例变量
public void display() {
System.out.println(name + " " + age);
}
}
5.3 类变量(静态变量)
使用 static 关键字声明的变量,属于类本身:
java
public class Counter {
static int count = 0; // 类变量,所有实例共享
public Counter() {
count++;
}
}
6. 变量的生命周期
- 局部变量:从声明处开始,到所在代码块结束
- 实例变量:从对象创建开始,到对象被垃圾回收结束
- 类变量:从类加载开始,到程序结束
7. 常量(Constants)
使用 final 关键字声明常量,一旦赋值就不能修改:
java
// 常量声明
final double PI = 3.141592653589793;
final int MAX_USERS = 1000;
// 编译错误:不能修改常量
// PI = 3.14;
8. 类型转换
8.1 自动类型转换(隐式转换)
小范围类型自动转换为大范围类型:
java
int i = 100;
long l = i; // 自动转换:int → long
double d = l; // 自动转换:long → double
8.2 强制类型转换(显式转换)
大范围类型转换为小范围类型需要强制转换:
java
double d = 9.78;
int i = (int) d; // 强制转换,结果为 9(丢失小数部分)
long l = 1000L;
int j = (int) l; // 强制转换
9. 最佳实践
- 变量名要有意义,避免使用单字母(循环变量除外)
- 声明时尽量初始化
- 使用 final 关键字声明不应该被修改的变量
- 注意变量的作用域,避免不必要的全局变量
- 遵循 Java 命名规范
10. 常见错误与调试
java
// 错误1:未初始化就使用
int x;
System.out.println(x); // 编译错误
// 错误2:超出作用域
{
int y = 10;
}
System.out.println(y); // 编译错误:y 已超出作用域
// 错误3:类型不匹配
int a = 10.5; // 编译错误:需要强制转换
总结
变量是 Java 编程的基础,理解变量的声明、初始化、数据类型、作用域和生命周期对于编写高质量的 Java 代码至关重要。掌握这些基础知识后,你将能够更有效地组织和管理程序中的数据。