# Java 基础学习笔记

> 日期：2026年7月8日
> 包名：`com.lovecoding.day02`

---

## 一、数据类型

### 1. 基本数据类型（8种）

| 类别 | 关键字 | 说明 |
|------|--------|------|
| 整数 | `byte` | 字节型 |
| 整数 | `short` | 短整型 |
| 整数 | `int` | 整型（默认） |
| 整数 | `long` | 长整型，值末尾加 `L` |
| 浮点 | `float` | 单精度，值末尾加 `F` |
| 浮点 | `double` | 双精度（默认） |
| 字符 | `char` | 字符型，单引号，只能存1个字符 |
| 布尔 | `boolean` | 布尔型，取值 `true` / `false` |

### 2. 引用数据类型

- 最常用：`String`（字符串）
- 引用数据类型特点：**首字母大写**
- 字符串值需要用**双引号**括起来

### 3. 变量创建格式

```java
数据类型 变量名 = 变量值;
int age = 25;
```

### 4. 示例代码

```java
// 整数类型
byte a = 15;
short b = 16;

// 浮点类型
float c = 3.14F;    // float 变量值后面必须加 F

// 字符类型
char d = 'a';       // 单引号，只能存1个字符

// 布尔类型
boolean e = true;   // true 真 / false 假

// 字符串类型
String name = "张三";
String email = "12346@163.com";
long phone = 13636363366L;
```

---

## 二、标识符命名规则与规范

### 规则（必须遵守）

1. 只能使用：字母（a-z, A-Z）、数字（0-9）、符号（`$`、`_`）
2. **不能以数字开头**（`1abc` 不行，`abc1` 可以）
3. **不能使用 Java 关键字或保留字**，但可以包含关键字

> 关键字是 Java 规定的固定单词（如 `int`、`byte`、`short` 等），IDEA 中显示为蓝色小写字母。

### 规范（建议遵守）

**驼峰式命名：**

| 类型 | 规则 | 示例 |
|------|------|------|
| 大驼峰（类名） | 所有单词首字母大写 | `String`、`StringBuffer`、`StringBuilder` |
| 小驼峰（变量名） | 第一个单词首字母小写，其余首字母大写 | `myClass`、`studentName`、`studentAge` |

**蛇形命名：**

- 所有单词字母小写，单词之间使用下划线分隔
- 示例：`student_name`、`student_age`

> **注意：** Java 严格区分大小写。命名要有含义，不要使用 `a`、`b`、`x` 这种无意义命名。

---

## 三、算术运算符

| 运算符 | 含义 | 说明 |
|--------|------|------|
| `+` | 加 | |
| `-` | 减 | |
| `*` | 乘 | |
| `/` | 除 | 两边都是整数，运算结果为整数（直接砍掉小数） |
| `%` | 取余（模） | `10 % 3 = 1` |
| `++` | 自增 | 为原数增加 1 |
| `--` | 自减 | 为原数减少 1 |

### `++` 前置与后置的区别

| 形式 | 执行顺序 |
|------|----------|
| `++i`（前置） | **先自增**，再做其他操作（输出、赋值等） |
| `i++`（后置） | **先做其他操作**（输出、赋值等），再自增 |

```java
int x = 1, y = 1;
System.out.println(x++);   // 输出 1，然后 x 变为 2
System.out.println(x);      // 输出 2
System.out.println(++y);    // y 先变成 2，然后输出 2
```

#### 复杂示例

```java
int z = 1;
System.out.println(z++ + z + z++ + z);
// 运算过程：
// z++ (1, z变为2) + z (2) + z++ (2, z变为3) + z (3)
// = 1 + 2 + 2 + 3 = 8
```

---

## 四、比较运算符

| 运算符 | 含义 |
|--------|------|
| `>` | 大于 |
| `<` | 小于 |
| `==` | 等于 |
| `>=` | 大于等于 |
| `<=` | 小于等于 |
| `!=` | 不等于 |

> **注意：** 比较运算符的运算结果一定是**布尔类型**（`true` / `false`）。

```java
int a = 10, b = 5;
System.out.println(a > b);   // true
System.out.println(a < b);   // false
System.out.println(a == b);  // false
System.out.println(a >= b);  // true
System.out.println(a <= b);  // false
System.out.println(a != b);  // true
```

---

## 五、逻辑运算符

| 运算符 | 名称 | 规则 |
|--------|------|------|
| `&` | 与（AND） | 两边同时为 `true`，结果才为 `true` |
| `\|` | 或（OR） | 两边同时为 `false`，结果才为 `false` |
| `!` | 非（NOT） | 取反 |
| `&&` | 短路与 | 左边为 `false`，右边不运算，直接返回 `false` |
| `\|\|` | 短路或 | 左边为 `true`，右边不运算，直接返回 `true` |
| `^` | 异或（XOR） | 两边相同返回 `false`，不同返回 `true` |

### 真值表

| a | b | a & b | a \| b | a ^ b |
|---|---|-------|--------|-------|
| true | true | true | true | false |
| true | false | false | true | true |
| false | true | false | true | true |
| false | false | false | false | false |

### 示例代码

```java
// & 与
boolean b1 = 15 > 3 & 7 == 6;   // true & false = false

// | 或
boolean b2 = 15 > 3 | 7 == 6;   // true | false = true

// ! 非
boolean b3 = !(15 > 3);          // !true = false

// ^ 异或
System.out.println(true ^ true);    // false
System.out.println(true ^ false);   // true
```

---

## 六、三目（三元）运算符

### 语法

```java
布尔表达式 ? 表达式1 : 表达式2
```

- 如果布尔表达式为 `true`，执行表达式1
- 如果布尔表达式为 `false`，执行表达式2

### 运算符分类

| 类型 | 说明 | 示例 |
|------|------|------|
| 单目运算符 | 只有一个操作数 | `++`、`--` |
| 双目运算符 | 左右两侧各有一个操作数 | `+`、`-`、`*`、`/` 等 |
| 三目运算符 | 有三个操作数 | `?:` |

### 示例

```java
// 嵌套三目
System.out.println(15 > 3 ? 3 > 6 ? 17 : 15 : "假");
// 第一个条件 15>3 为 true，执行 3>6?17:15
// 3>6 为 false，结果为 15
```

---

## 七、课后练习题

1. 定义两个整数 a 和 b，使用算术运算符计算并输出 `a + b`、`a - b`、`a * b`、`a / b`、`a % b`。
2. 定义一个整数，使用三目运算符判断它是奇数还是偶数，输出"奇数"或"偶数"。
3. 定义三个整数，使用三目运算符找出并输出其中的最大值。
4. 定义一个年份，使用逻辑运算符判断是否为闰年（能被4整除且不能被100整除，或能被400整除），输出 `true` 或 `false`。
5. 定义一个整数 score（0-100），使用嵌套三目运算符输出等级：`score >= 90` 为 "A"，`score >= 60` 为 "B"，否则为 "C"。
6. 定义一个整数，使用逻辑运算符判断它是否满足：大于10 **且** 小于100，输出 `true` 或 `false`。
7. 定义一个字符，使用比较运算符判断它是否为大写英文字母（'A' 到 'Z' 之间），输出 `true` 或 `false`。
8. 已知 `int a = 5; int b = 5;` 分别执行 `int x = a++;` 和 `int y = ++b;` 后，输出 `x`、`a`、`y`、`b` 的值，并说明前置和后置自增的区别。
9. 定义一个三位正整数，使用算术运算符拆分出它的个位、十位、百位，按格式输出。
10. 定义三个边长 a、b、c，使用比较运算符和逻辑运算符判断能否构成三角形（任意两边之和大于第三边），输出 `true` 或 `false`。

---

## 八、变量类型选择参考

| 名词 | 推荐类型 |
|------|----------|
| 成绩 | `int` / `double` |
| 年龄 | `int` |
| 性别 | `char` |
| 学生编号 | `int` / `String` |
| 身高 | `double` |
| 体重 | `double` |
| 姓名 | `String` |
| 手机号 | `long` / `String` |
| 邮箱 | `String` |
| 地址 | `String` |
| 工龄 | `int` |
| 月薪 | `double` |
| 税率 | `double` |
| 折扣 | `double` |
| 数量 | `int` |
| 单价 | `double` |
| 总分 | `int` / `double` |
| 排名 | `int` |
| 是否激活 | `boolean` |
| 余额 | `double` |
| 利率 | `double` |
| 有效天数 | `int` |
| 体温 | `double` |
| 是否毕业 | `boolean` |

---

