这个笔记假定你有一定的编程语言基础,不过只需要非常少量的基础。如果你大致明白什么是程序语言,能简单使用一些 if/else 语句就属于“有一定基础”的范畴了。
1.1 – Java 简介和环境配置
1.1.1 – Java 简介
一、历史
Java 是目前全球最流行的编程语言之一。Java 可运行于多个平台,如 Windows, Mac OS 及其他多种 UNIX 版本的系统。
它是由 Sun Microsystems 公司于 1995 年 5 月推出的高级程序设计语言,这个项目的领导者是詹姆斯·高斯林(James Gosling),他被誉为“传统意义上的Java 之父”。
这个项目最初名为 Oak 语言,其设计目标是用于数字电视、机顶盒等消费类电子产品的开发,模仿了 C++。就在这时,互联网开始兴起,Oak 这种“一次编写、随处运行”的特点仿佛是为浏览器量身定制,于是团队决定转型。在注册商标时,他们发现 Oak 名称已被占用。在喝咖啡时,他们决定将这门语言改名为 Java,这是印尼爪哇岛咖啡的名称(因此 Java 的图标是一杯咖啡)。
如今,Java 已经被广泛应用于后端开发、Android 开发、大数据技术、科学计算和中间件等领域。
二、主要版本
1998 年起,Java 语言被分为三个版本:
- Java SE – Java 的标准版,用于桌面应用的开发,是另外两个版本的基础;
- Java ME – Java 的小型版,用于嵌入式电子设备或小型移动设备的开发;
- Java EE – Java 的企业版,用于 Web 开发;
这三个版本的主要区别是工具包和 JVM 不同,在 1.1.3 有更多说明。
三、Java 是一门混合型语言
为了兼顾执行效率和跨平台特性,Java 在运行时:
- 先将
.java后缀的 Java 源文件通过 javac 编译器编译为.class后缀的字节码(Bytecode)文件; - JVM(Java 虚拟机)加载字节码文件,解释器立即开始逐行解释和执行字节码;
- 当 JVM 发现热点代码时,JIT(Just-In-Time)编译器将其编译为本地机器码并缓存,提高运行速度。
1.1.2 – Java 环境配置
一、环境配置
在 Windows 系统下配置 Java:
- 下载 JDK(Java 开发工具包),地址:https://www.oracle.com/java/technologies/downloads/;
- 添加环境变量
JAVA_HOME,值为 JDK 所在路径; - 在环境变量
PATH中新增%JAVA_HOME%\\bin;
检验 JDK 是否成功配置:

二、尝试编译一个 Java 程序
在 CMD 中使用 javac 命令进行编译,再使用 java 命令即可运行。例如这个 Java 程序:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
$ javac HelloWorld.java
$ java HelloWorld
Hello World
使用 javac 命令后,虽然没有任何提示,但是如果成功编译、没有错误的话,会出现一个名为 HelloWorld.class 的文件。
需要注意的地方:
- Java 是大小写敏感的;
- 类名中的每个单词的首字母都应大写(大驼峰法);方法名都应以小写开头,从第二个单词开始首字母大写(小驼峰法);
- 源文件名必须与类名完全相同;
- 所有的 Java 程序都由
public static void main(String[] args)方法(主方法)开始执行。
三、输入和输出的方法
在 Java 中使用 Scanner 类的方法获取用户输入:
//1. 导包
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
//2. 创建对象
Scanner sc = new Scanner(System.in);
//3. 接收数据
int i = sc.nextInt();
System.out.println(i);
}
}
在 Java 中使用 System 类的方法进行输出:
System.out.println("Hello World");在知道了以上内容之后你就可以用去打 ACM 了。
1.1.3 – JVM、JRE、JDK……?
一、JVM (Java Virtual Machine)
所有的 Java 程序都运行在 JVM 上,JVM 是实现“一次编译、随处运行”的关键。
二、JRE (Java Runtime Environment)
Java 运行时环境,是运行 Java 程序所必须的最小集合,仅包含 JVM + 核心类库(核心类库:如字符串处理、I/O 库等)。
适用于只想在电脑上运行一个 Java 程序的用户。
三、JDK (Java Development Kit)
Java 开发工具包,包含了 JVM + 核心类库 + 开发工具(开发工具:如 javac 编译器、jdb 调试器、javadoc 文档生成器、jhat 内存分析工具……)。
适用于想在电脑上进行 Java 开发的开发者。
1.2 – Java 基础知识
1.2.1 – 注释
Java 注释有三个类型:单行注释、多行注释和文档注释。单行注释以 // 开头;多行注释以 /* 开头,*/ 结尾;文档注释以 /** 开头,*/ 结尾,通常出现在类、方法、字段等的声明之前,用于生成代码文档,这种注释可以被 Javadoc 等工具提取并生成 API 文档。
文档注释支持识别很多标签,标签以 @ 开头,例如:
| @param | 说明一个方法的参数 | @param parameter-name explanation |
| @return | 说明返回值类型 | @return explanation |
1.2.2 – 关键字和字面量
一、关键字
关键字就是被 Java 赋予了特定含义的单词,关键字的字母全部小写。例如 class 关键字,用于创建、定义一个类。类是 Java 最基本的组成单元。
二、字面量
字面量(Literal)指的是源代码中直接写出来的、固定不变的值。例如 10、3.14 或者 "Hello"。

字面量有一些常用的前缀和后缀,用于标识特定的数据。
| 类型 | 前缀/后缀 | 示例 | 说明 |
|---|---|---|---|
| Long | 后缀 L ,也可以小写,但易数字 1 混淆 | 100000000L | 必须加 L,否则视为 int |
| Float | 后缀 F ,也可以小写 | 3.1415926F | 必须加 F,否则视为 double |
| 十六进制数 | 前缀 0x | 0xFF | 对应十进制 255 |
| 八进制数 | 前缀 0 | 017 | 对应十进制 15 |
| 二进制数 | 前缀 0b | 0b101 | 对应十进制 5 |
| 科学计数法 | 字母 e | 1.2e2 | 即 $1.2 \times 10^2 = 120$ |
补充知识:
- 为提高代码可读性,Java 7 以后允许在数字字面量中间插入下划线,例如
int money = 1_000_000;,这等同于1000000; - 对于 Java 15 以后的版本,可以用三个双引号标记一个“文本块”,三引号内可以填入任意字符,包含空格和换行符;
- 与 C 语言一样,Java 支持基本的转义字符。
1.2.3 – 变量和数据类型
一、变量
Java 中变量的声明、赋值和使用的方式与 C 语言完全一致。变量的命名规则:
- 使用有意义的名字: 变量名应该具有清晰的含义,能够准确地反映变量的用途。避免使用单个字符或无意义的缩写;
- 驼峰命名法(Camel Case): 在变量名中使用驼峰命名法,即将每个单词的首字母大写,除了第一个单词外,其余单词的首字母都采用大写形式。例如:
myVariableName; - 避免关键字,区分大小写,不以数字开头。
二、数据类型
Java 有两大数据类型:基本数据类型 (Primitive Types) 和引用数据类型 (Reference Types)。
引用数据类型不直接存储具体数值,而是存储对象的地址(内存引用)。引用本身(例如类、接口、数组、枚举等)位于栈内存,其指向的对象存储在堆内存中的一块区域,引用类型的赋值是地址拷贝。
内置(基本)数据类型由 Java 预先定义,直接存储具体数值,存储在栈内存中。与引用数据类型相比,基本数据类型的访问速度快,占用内存小。基本类型的赋值是值拷贝。
| 类型分类 | 数据类型 | 大小 (位) | 示例 |
|---|---|---|---|
| 整数型 | byte, short, int, long | 8, 16, 32, 64 | int age = 25; |
| 浮点型 | float, double | 32, 64 | double price = 19.99; |
| 字符型 | char | 16 (Unicode) | char grade = 'A'; |
| 布尔型 | boolean | 1 (理论上) | boolean isJavaFun = true; |
在类型转换时的大小关系是:double > float > long > int > short > byte;

