AP CSA 03 - 变量

零风PLFJY Lv2

这里应该还是在考纲Unit 1的范围之内,今天讲一个编程中很常见的话题:变量和常量

变量 (Variables)

首先是变量,变量 (Variables) 你就想象成一个容器,可以用来存放任何东西,比如:数字、文本、符号、对象(这个后面会讲)

当你创建了这一个容器之后,Java 会根据数据类型的不同给这个容器在内存上分配一部分的空间

定义(创建)变量 (Declaring Variables)

那么变量究竟该如何被定义(创建)呢?我们在 Java 中是这样操作的:

1
2
3
4
//<数据类型><空格><变量名>;
//比如:
int a;
//这里就是定义了一个名字为 a 的 int 类型变量

好的那么我们总得个 a 里面放一个东西吧?这个放东西的操作叫做赋值 (assignment),赋值的操作是这样的:

1
2
3
4
5
a = 10;
//这里就是给 a 设置了一个数字 10
//也可以在变量定义的时候给它赋值,叫做赋初始值,
//下面的意思为创建一个值为 3.5 的 double 类型的变量 b
double b = 3.5;

这个就是赋值语句:assignment statement

运算

数字类型的变量可以进行运算:

1
2
3
a = 10 + 1;
//意思就是把 10 + 1 的值赋值给变量 a
//那么此时 a 里面的值就是 10 + 1 = 11

当然,运算的式子里面也可以有变量:

1
2
3
b = b - 1.5;
//意思是把 b - 1.5 的值赋值给变量 b
//那么此时变量 b 里面的值就是 3.5 - 1.5 = 2

每次写这种带自身的加减运算都好麻烦,都要写两遍这个变量的名字,能不能简化一点?还真可以:

1
2
3
4
b -= 1.5;
//这里完全等价于上面的 b = b - 1.5;
//那么举一反三一下加法就是
b += 1.5;

自增自减运算

那么这里就可以引入一种很新颖的运算符号,上一章提到过,叫做自增自减运算

1
2
3
4
5
6
7
8
int i = 0;
i++;
//意思是把 i 自身 +1,等价于 i = i + 1; 等价于 i += 1;
//那么此时 i 的值就是 0 + 1 = 1

i--;
//意思是把 i 自身 -1,等价于 i = i - 1; 等价于 i -= 1;
//那么此时 i 的值就是 1 - 1 = 0

然后这个运算你也可以把符号放前面,单独一条没有任何区别,但是如果和别的东西组合在一起的话这两种写法是有很大的差别的:

1
2
++i;
--i;

这么写也是合法的,但是接下来是个重点🌟🌟🌟,AP的课本里不讲,但是写FRQ里面千万不要写错了

自增自减符号在后面时,如果我们获取这整条式子的值像这样:

1
2
//在这一行的时候 i 是 0
int c = i++;

那么此时变量的 c 里面是先拿到了 i 自增之前的值,i 再进行自增运算
这一条式子过后,c 里面的值是 0,然后 i++i 的值变成了 1

理所当然反过来,自增自减符号在前面时,就是先进行自增自减运算,再拿到 i 的值:

1
2
3
//为了方便理解,我先把 i 改成 3
i = 3;
int c = --i;

那么此时变量 i 先进行自减运算,这里 i 先变成了 3 - 1 = 2,然后 c 再拿到 i 的值,现在 c 里面是 2

取模 (mod) %

好的这种自增自减讲完了接下来是取模 (mod) %
取模运算就是取余数,比如:

1
2
int d = 3 % 2;
//那么 d 里面的值就是 3 ÷ 2 的余数,也就是1

至于这个运算有啥用呢?主要有如下作用:

  • 判断奇偶
    拿任意数字 %2,然后看有没有余数,有余数就是奇数,没有就是偶数,比如上面的 3 % 2 我们得到余 1 所以 3 就是奇数
  • 分解位数
    拿任意数字 %10,那么我们就可以得到最后一位的数字,比如 123 % 10 我们可以得到最后一位 3,可以用前一章讲过的整数类型的特性来进行后续操作,没学会也不要紧

String 变量

String 变量的定义是这样的,文本的内容需要用双引号引起来

1
2
String s = "Hello World";
//意思是创建了一个名字叫 s 的文本内容为 "Hello World" 的String变量

准确说这个应该是 String 类型的对象,但是这里为了方便理解先统一叫做变量

拓展知识:变量类型自动推导

那么这里我们来补充一个AP用不到考试也不能用的知识点,听得懂就记着,听不懂就算了,跳过去就行
Java支持自动类型推导,也就是我们可以通过给初始值的方式让Java编译器自动识别这个变量应该是什么类型的,例子:

1
2
3
4
5
var c = 5;
//var 是用于创建自动类型推导变量的关键字
//因为值是 5,所以Java自动推导类型为 int
//整个的意思就是,创建一个,初始值为 5,自动推导类型为 int 的变量
//等价于 int c = 5

警告

不要在FRQ(简答题)里面这么写,给我乖乖写清楚变量类型!题目就是考你对于类型的掌握,这里只是作知识补充

变量的命名 (Naming Variables)

好的接下来是个重点,变量名称不能是编译器预定关键字,这些东西编译器另有他用,不能用于取名
包括上一章里面的所有数据类型和boolean的true或false,全部的都列在本章节最后附录的表里面了,你要脑力充足可以去背,我建议是不用背,变量取名的时候稍微用稍微复杂一点的名字就好了:Java 保留关键字 (Java Reserved Keywords)

变量的命名应该遵循易读原则,需要描述清楚它的用途,且不应过长

吐槽时间:我不知道为啥教算法的都教学生创建变量是 abcd 的,完全没有规律可循,纯纯误人子弟,我前面举例子的变量都没啥意义,所以可以用 abcd 之类的,但是只要你的变量是要存有意义的数据,那么就要有良好的命名

在 Java 中,变量的命名通常采用 小驼峰(lower camel case) 命名方法,即除第一个单词外,每一个单词开头字母大写,例如:userNamehelloWorldmyNameIsZero,现在对于一些专有名词的大小写意见不一,我习惯是大写,看你们,比如ID、SQL、UI一类的,但是总得来说一切遵循易读原则

举个例子:如果我要创建一个类型用于表示一个学生,那么他应该有如下的信息需要存:

  • 姓名
  • 年龄
  • 性别
  • 班级
  • 学号

那么与之相对的,我取名就应该是这个样子:

  • name
  • age
  • gender
  • class
  • studentID
一些惯用的命名习惯

有些变量的命名已经形成了习惯,最好按照习惯来写,而不是采用自创的命名

比如,你需要用一个临时变量存一些内容,那么这个变量的名称按照习惯一般会被取名为 temp 或者 tmp 都是代表暂存的意思

又比如,你要存一个文档的文件大小,我们一般不会用全称 document,而是会用简称 doc,所以取名就是 docSize

还有一个最经典的例子,就是参数 argument,一般没人会写完全称,太长了,都是直接用 arg,复数用 args

总的来说就是有很多简写需要注意,不是说你写全称会错,而是你可能会看不懂别人写的简写

知识补充:常量 (Constants)

本来学编程这个玩意是绕不过去的,但是不知道为什么AP它不讲也不考,所以我在这就作为只是补充来讲了

什么是常量

常量也是也是一个容器,它用来存放代码运行中不会后续出现任何变化的量,比如软件名称、版本号之类的

常量的声明 (Declaring Constants)

常量的声明和变量类似,前面讲过变量的声明是这样的:

1
2
3
//<数据类型><空格><变量名>;
//比如:
int a;

那么常量的声明就是这样的:

1
2
3
//final<空格><数据类型><空格><变量名>;
//比如:
final int a = 20;

常量需要在声明的时候就赋好初始值,至于剩下的,就都一样了,但是区别就是常量里的值无法被修改

1
2
a = 10;
// 报错,常量无法被修改

但是可以被访问:

1
2
int b = a;
// 此时 b 的值就是 20

就是这样

本章节到此结束

附录

Java 保留关键字 (Java Reserved Keywords)

1. 数据类型与值类型 (Data Types & Literals)

关键字含义
byte8 位整数类型
short16 位整数类型
int32 位整数类型
long64 位整数类型
float32 位浮点数类型
double64 位浮点数类型
char单个 Unicode 字符
boolean布尔类型(true/false)
true布尔真值
false布尔假值
null空引用字面值
void无返回值类型

2. 类与对象 (Classes, Objects & Interfaces)

关键字含义
class定义类
interface定义接口
enum定义枚举类型
extends类继承或接口继承
implements类实现接口
this当前对象引用
super父类对象引用
new创建对象实例
instanceof测试对象类型
package声明包名
import引入类或包

3. 访问控制与修饰符 (Access & Modifiers)

关键字含义
public公有访问修饰符
protected受保护访问修饰符
private私有访问修饰符
static静态成员或方法
final不可修改、最终定义
abstract抽象类或方法
synchronized同步控制(多线程)
volatile多线程可见性变量
transient序列化时跳过的成员
native使用本地(C/C++)方法
strictfp限定浮点计算精度

4. 控制语句 (Control Flow)

关键字含义
if条件判断
else条件分支
switch多分支选择
caseswitch 分支
default默认分支
for循环
while循环
do循环(先执行后判断)
break跳出循环或 switch
continue跳过当前循环
return返回结果
yield从 switch 表达式返回值(Java 14+)

5. 异常与错误处理 (Exception Handling)

关键字含义
try异常捕获块
catch捕获异常
finally无论异常与否都会执行
throw抛出异常
throws声明可能抛出的异常
assert断言条件(调试用)

6. 继承与多态 (Inheritance & Polymorphism)

关键字含义
super引用父类
this引用当前对象
instanceof判断类型关系

7. 模块系统 (Modules, since Java 9)

关键字含义
module定义模块
requires声明模块依赖
exports导出包
opens允许反射访问包
uses声明使用服务接口
provides提供服务实现
to限定导出目标模块
with指定服务实现类

Java 当前共有 67 个保留关键字 + 3 个字面值 (true, false, null)。

  • Title: AP CSA 03 - 变量
  • Author: 零风PLFJY
  • Created at : 2025-09-22 16:11:15
  • Updated at : 2025-12-06 22:44:55
  • Link: https://blog.plfjy.top/ap-csa/03-var/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments