讲解

变量是存放数据的容器:先声明一个类型和名字,再把值装进去,之后可以通过名字反复读取或修改。Java 是静态类型语言,声明变量时必须明确类型——int age = 20; 表示 age 这个容器只能装整数,之后写 age = "二十" 会在编译期就被拒绝。这种「编译前就把类型错误揪出来」的特性,是 Java 区别于 JavaScript、Python 的重要性格。

Java 的命名约定值得从一开始就养成习惯:变量名和方法名用小驼峰(第一个单词全小写,后续单词首字母大写),如 studentName、totalPrice;类名用大驼峰,如 BankAccount;常量用全大写加下划线,如 MAX_SIZE。名字只能由字母、数字、下划线和美元符号组成,且不能以数字开头;虽然 Java 允许用中文做变量名,但工程实践中一律用英文。

想让一个变量「值不能再改」,用 final 修饰它,它就变成了常量:final double PI = 3.14159;。常量必须在声明时或使用前赋值一次,之后再赋值就是编译错误。另外 Java 10 引入了局部变量类型推断:var score = 95; 编译器会根据右边的值自动推断 score 是 int。var 能让代码更短,但初学者建议先显式写类型,把类型意识练成本能再适度使用。

示例

声明几种常见类型的变量并输出:

public class Main {
    public static void main(String[] args) {
        int age = 20;
        double height = 1.75;
        String name = "李明";
        boolean isStudent = true;

        System.out.println(name + " 今年 " + age + " 岁");
        System.out.println("身高:" + height + " 米");
        System.out.println("是学生吗?" + isStudent);

        age = 21;
        System.out.println("一年后 " + age + " 岁");
    }
}

final 常量只能赋值一次,var 让编译器自动推断类型:

public class Main {
    public static void main(String[] args) {
        final double PI = 3.14159;
        double radius = 2.0;
        System.out.println("圆的面积:" + PI * radius * radius);

        var message = "由 var 推断出的字符串";
        var count = 42;
        System.out.println(message + ",数字是 " + count);

        // PI = 3.14;  // 取消注释会编译报错:无法为 final 变量赋值
    }
}

常见坑

  • 变量没赋值就使用:Java 的局部变量没有默认值,int x; System.out.println(x); 编译直接报错。声明后先赋初值再使用。
  • 以为 var 是动态类型:var 只是让编译器根据初始值推断一次类型,推断完成后类型就固定了,var a = 1; a = "文字"; 照样编译失败。
  • final 和「不可变」混淆:final 修饰的变量不能重新指向别的值,但如果它指向的是对象,对象内部的内容仍可能变化。final 管的是「引用不换手」。
  • 命名随心所欲:a、b、c、temp 满天飞,三天后自己都看不懂。变量名要说明它装的是什么,宁可长一点(如 averageScore)也不要缩写猜谜。

小结

变量先声明类型再使用,命名遵循小驼峰约定;final 定义不可再赋值的常量,var 做编译期类型推断。下一节系统认识 Java 的八种基本数据类型。