第一阶段:Java 基础入门
一、Java 简介
Java 的标志是一杯热咖啡,喝上一杯热咖啡是否有助于敲代码,或许你们可以尝试一下。
1.1 发展历史
Java 语言是美国 Sun 公司(Stanford University Network)在 1995 年推出的高级编程语言。所谓编程语言,是计算机的语言,人们可以使用编程语言对计算机下达命令,让计算机完成人们需要的功能。
- 2009 年:Sun 公司被甲骨文(Oracle)公司收购,所以现在访问 oracle 官网即可:https://www.oracle.com
- Java 之父:詹姆斯·高斯林(James Gosling),被称为 "Java 之父"

1.2 版本演进时间线
| 年份 | 版本 | 里程碑事件 |
|---|---|---|
| 1995 | - | Sun 公司推出 Java 语言 |
| 1996 | 1.0 | 发布首个正式版 |
| 1997 | 1.1 | 引入内部类、JDBC |
| 1998 | 1.2 | 引入集合框架、Swing |
| 2000 | 1.3 | 改进性能、引入 JNDI |
| 2002 | 1.4 | 引入 assert、NIO |
| 2004 | 5.0 | 引入泛型、枚举、注解、自动装箱 |
| 2006 | 6.0 | 改进编译性能、脚本语言支持 |
| 2009 | - | Oracle 收购 Sun 公司 |
| 2011 | 7.0 | 引入 try-with-resources、Switch 支持 String |
| 2014 | 8.0 | 里程碑版本:Lambda、Stream API、Optional |
| 2017 | 9.0 | 模块化系统、JShell |
| 2018.3 | 10.0 | 局部变量类型推断(var) |
| 2018.9 | 11.0 | LTS 版本,引入 HttpClient |
| 2021 | 17.0 | LTS 版本,密封类、模式匹配 |
| 2025 | 21+ | 持续演进,虚拟线程等 |
二、Java 语言的特点
简单性:Java 语法与 C 语言相近,舍弃了 C++ 中难以理解的特性(如指针、多重继承),使编程更简单。
跨平台性:通过 Java 编写的应用程序在不同的操作系统上都可以运行——"一次编写,到处运行"(Write Once, Run Anywhere)。
面向对象:Java 是一种面向对象的语言,支持封装、继承、多态三大特性。
多线程:Java 支持多个线程同时执行,并提供多线程之间的同步机制。
分布性:支持数据分布和操作分布,通过 URL 访问网络对象,方式与访问本地文件系统相似。
高性能:随着 JIT(Just In Time)即时编译技术的发展,Java 的运行速度越来越高。
健壮性:强类型机制、异常处理、垃圾回收机制等,使 Java 成为一种可靠的语言。
安全性:运行在虚拟机中,有安全管理器和类加载机制,防止恶意代码访问本地系统。
三、编译与运行基础
3.1 编译型和解释型语言
Java 语言是人为规定的由英文字符组成的,而计算机只能识别 01 二进制指令。因此需要一个转换过程,让计算机读懂代码。
| 类型 | 工作方式 | 优缺点 |
|---|---|---|
| 编译型 | 编译器将源代码一次性编译成二进制机器码 | 执行快,但不跨平台 |
| 解释型 | 解释器逐行读取代码并实时翻译执行 | 跨平台,但执行慢 |
Java 是 先编译后解释 的语言:
.java源文件 → javac 编译 →.class字节码文件.class字节码 → JVM 解释执行 → 机器指令
3.2 JVM(Java Virtual Machine)
JVM 是 Java 虚拟机(Java Virtual Machine)的缩写,它是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现。
为什么使用 JVM?
Java 语言最重要的特点就是可以在任何操作系统中运行。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 语言编译程序只需生成在 JVM 上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
3.3 JDK、JRE、JVM 的关系
┌─────────────────────────────┐
│ JDK │
│ (Java Development Kit) │
│ ┌───────────────────────┐ │
│ │ JRE │ │
│ │ (Java Runtime Env.) │ │
│ │ ┌─────────────────┐ │ │
│ │ │ JVM │ │ │
│ │ │ (Java Virtual │ │ │
│ │ │ Machine) │ │ │
│ │ └─────────────────┘ │ │
│ └───────────────────────┘ │
└─────────────────────────────┘- JDK = Java Development Kit(开发工具包),包含 JRE + 开发工具(javac、jar、javadoc 等)
- JRE = Java Runtime Environment(运行环境),包含 JVM + 核心类库
- JVM = Java Virtual Machine(虚拟机),负责执行字节码
一句话总结:使用 JDK 开发 Java 程序,交给 JRE 中的 JVM 去运行程序。
四、开发环境配置
4.1 安装 JDK
访问 Oracle 官网 下载对应操作系统的 JDK,推荐使用 JDK 17(LTS) 或 JDK 21(LTS)。
4.2 配置环境变量
Windows 环境下需要配置以下环境变量:
JAVA_HOME = C:\Program Files\Java\jdk-17
Path = %JAVA_HOME%\bin验证安装:
java -version
javac -version4.3 第一个 Java 程序
// HelloWorld.java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
}编译与执行:
javac HelloWorld.java # 编译 → 生成 HelloWorld.class
java HelloWorld # 运行 → 输出 Hello, Java!五、标识符、关键字与变量
5.1 什么是标识符?
标识符是我们给类、方法、变量取的名字。
命名规则:
- 由字母、数字、下划线(
_)、美元符($)组成 - 不能以数字开头
- Java 区分大小写
5.2 什么是关键字?
关键字是 Java 中具有专门意义和用途的单词,不能当做标识符使用。
abstract assert boolean break byte case catch char class
const* continue default do double else enum extends final
finally float for goto* if implements import instanceof int
interface long native new package private protected public
return short static strictfp super switch synchronized this
throw throws transient try void volatile while开发工具(如 IDEA)会自动高亮关键字,遇到异常提示时查看即可,无需死记硬背。
5.3 命名规范
| 元素 | 规范 | 示例 |
|---|---|---|
| 项目名 | 首字母大写 | MyProject |
| 包名 | 全部小写,域名反写 | com.example.demo |
| 类名 | 大驼峰(每个单词首字母大写) | HelloWorld |
| 变量名 | 小驼峰(首单词小写,后续大写) | userName |
| 方法名 | 小驼峰 | getUserName() |
| 常量名 | 全部大写,下划线分隔 | MAX_VALUE |
5.4 变量
什么是变量?
编程的本质是对内存中数据的访问和修改。变量是程序中最基本的存储单元。
int i = 10; // 在栈中开辟空间存放 10,名字叫 i
int j = 20; // 在栈中开辟空间存放 20,名字叫 j
int z = i + j; // 计算 i+j 并存放到 z 中变量的本质:带有名字的可操作的内存空间,可以存放不同类型的数据。
变量的组成:变量名、数据类型、变量值、作用域。
5.5 字符集
Java 使用 Unicode 字符集(统一字符集),包含世界上大部分字符(中文、日文、英文等)。
int 年龄 = 18; // 语法正确,但不建议使用中文命名计算机只能存储 0 和 1,Unicode 字符集提供了字符到二进制的翻译标准。ASCII 码是 Unicode 的前身,如字母 a 的二进制是 1100001(十进制 97)。
补充:常见字符集对比
| 字符集 | 说明 |
|---|---|
| ASCII | 7 位编码,表示 128 个字符 |
| ISO-8859-1 | 8 位编码,支持西欧语言 |
| GBK | 中文编码,兼容 ASCII |
| Unicode (UTF-8) | 统一字符集,可变长编码 |
六、数据类型
6.1 数据类型的分类
数据类型
├── 基本数据类型(8种)
│ ├── 整数型:byte, short, int, long
│ ├── 浮点型:float, double
│ ├── 布尔型:boolean
│ └── 字符型:char
└── 引用数据类型
├── 类(class)
├── 接口(interface)
└── 数组(array)6.2 八大基本数据类型
bit(位)是计算机最小存储单元,1 字节(byte)= 8 bit
| 类型 | 位数 | 取值范围 | 默认值 | 备注 |
|---|---|---|---|---|
byte | 8 | -128 ~ 127 | 0 | 字节单位 |
short | 16 | -32,768 ~ 32,767 | 0 | 少用 |
int | 32 | -2^31 ~ 2^31-1 | 0 | 整数默认 |
long | 64 | -2^63 ~ 2^63-1 | 0L | 需加 L/l 后缀 |
float | 32 | ±3.4e-45 ~ ±1.4e38 | 0.0f | 需加 F/f 后缀 |
double | 64 | ±4.9e-324 ~ ±1.8e308 | 0.0d | 小数默认,精度更高 |
boolean | JVM 定 | true / false | false | 逻辑判断 |
char | 16 | 0 ~ 65,535(Unicode) | '\u0000' | 单引号包裹 |
进制转换
6.3 类型转换
自动类型转换(隐式转换)
范围小的类型自动提升为范围大的类型:
byte → short → int → long → float → double
↑
charint a = 10;
double b = a; // 自动转换:10.0强制类型转换(显式转换)
范围大的类型转为范围小的类型,需手动强转,可能丢失精度:
double d = 9.99;
int i = (int) d; // 结果为 9,精度丢失运算时的类型提升
byte b1 = 10;
byte b2 = 20;
// byte b3 = b1 + b2; // 编译错误!byte 运算自动提升为 int
int i = b1 + b2; // 正确6.4 浮点数精度问题
Java 中浮点数运算可能会发生精度丢失:
System.out.println(0.1 + 0.2); // 0.30000000000000004解决方案:使用 BigDecimal:
import java.math.BigDecimal;
public class PrecisionDemo {
public static void main(String[] args) {
BigDecimal bi1 = new BigDecimal("0.3");
BigDecimal bi2 = new BigDecimal("3");
BigDecimal bi3 = bi1.multiply(bi2);
System.out.println("bi1 * bi2 = " + bi3);
}
}6.5 Scanner 输入(新增补充)
使用 Scanner 可以从控制台读取用户输入:
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入姓名:");
String name = sc.nextLine();
System.out.print("请输入年龄:");
int age = sc.nextInt();
System.out.println("你好," + name + ",你今年 " + age + " 岁了。");
sc.close();
}
}七、运算符
7.1 算术运算符
一元运算符
int a = 5;
int b = ++a; // 前++:a 先加 1 变为 6,再赋值给 b → b=6
int c = a++; // 后++:先将 a(6) 赋给 c,a 再加 1 → c=6, a=7| 运算符 | 名称 | 示例 | 结果 |
|---|---|---|---|
++ | 自增 | a++ / ++a | 值加 1 |
-- | 自减 | a-- / --a | 值减 1 |
二元运算符
int a = 10, b = 3;
System.out.println(a + b); // 13
System.out.println(a - b); // 7
System.out.println(a * b); // 30
System.out.println(a / b); // 3(整数除法,舍弃小数)
System.out.println(a % b); // 1(取余)
+除了加法运算外,还可以做字符串拼接:"Hello" + "World" → "HelloWorld"
7.2 赋值运算符
| 运算符 | 示例 | 等价于 |
|---|---|---|
= | x = 1 | 赋值 |
+= | x += 2 | x = x + 2 |
-= | x -= 2 | x = x - 2 |
*= | x *= 2 | x = x * 2 |
/= | x /= 2 | x = x / 2 |
%= | x %= 2 | x = x % 2 |
7.3 关系运算符
关系运算的结果是布尔值(true / false)。
| 运算符 | 含义 | 示例 |
|---|---|---|
== | 等于 | a == b |
!= | 不等于 | a != b |
> | 大于 | a > b |
< | 小于 | a < b |
>= | 大于等于 | a >= b |
<= | 小于等于 | a <= b |

7.4 逻辑运算符
| 运算符 | 含义 | 说明 |
|---|---|---|
&& | 短路与 | 两边都为 true 才 true;左边 false 则右边不执行 |
|| | 短路或 | 有一边 true 即 true;左边 true 则右边不执行 |
! | 非 | 取反:true 变 false,false 变 true |
易错点:不要将
&&写成&,或将||写成|,后者是位运算符,不支持短路。
public class LogicDemo {
public static void main(String[] args) {
int a = 5, b = 10;
boolean r1 = (a < b) && (b < 20); // true
boolean r2 = (a > b) || (b == 10); // true
boolean r3 = !(a == 5); // false
System.out.println(r1 + ", " + r2 + ", " + r3);
}
}7.5 位运算符
位运算符直接操作二进制位,效率极高。
| 运算符 | 含义 | 说明 |
|---|---|---|
& | 位与 | 对应位都为 1 则结果为 1 |
| | 位或 | 对应位有 1 则结果为 1 |
^ | 异或 | 对应位不同则结果为 1 |
~ | 取反 | 按位取反(包括符号位) |
<< | 左移 | 低位补 0,相当于乘以 2^n |
>> | 右移 | 带符号右移,高位补符号位 |
>>> | 无符号右移 | 高位补 0 |
public class BitDemo {
public static void main(String[] args) {
int x = 6; // 0000 0110
int y = 3; // 0000 0011
System.out.println(x & y); // 2 (0000 0010)
System.out.println(x | y); // 7 (0000 0111)
System.out.println(x ^ y); // 5 (0000 0101)
System.out.println(~x); // -7 (按位取反)
System.out.println(x << 1); // 12 (左移1位,相当于×2)
System.out.println(x >> 1); // 3 (右移1位,相当于÷2)
System.out.println(x >>> 1); // 3 (无符号右移)
}
}7.6 运算符优先级(补充)
| 优先级 | 运算符 |
|---|---|
| 1(最高) | () [] . |
| 2 | ++ -- ! ~(一元) |
| 3 | * / % |
| 4 | + - |
| 5 | << >> >>> |
| 6 | < <= > >= instanceof |
| 7 | == != |
| 8 | &(位与) |
| 9 | ^(异或) |
| 10 | |(位或) |
| 11 | && |
| 12 | || |
| 13 | ? :(三目) |
| 14(最低) | = += -= 等赋值 |
建议:不确定优先级时使用
()明确指定运算顺序。
第一阶段小结:本阶段学习了 Java 的发展历史、跨平台原理、开发环境搭建、变量与数据类型、以及各类运算符。这些是 Java 编程的基石,请务必熟练掌握。