Java 速查表
最后更新
Hello World 与程序结构
每个 Java 程序都从某个类里的 main 方法开始运行。
| 元素 | 代码 |
|---|---|
| 声明类 | public class Main { ... } |
| 入口点 | public static void main(String[] args) { ... } |
| 输出一行 | System.out.println("Hello, World!"); |
| 输出但不换行 | System.out.print("text"); |
| 读取输入 | Scanner sc = new Scanner(System.in); |
| 导入类 | import java.util.ArrayList; |
| 注释 | // line 和 /* block */ |
数据类型
基本类型全小写,对应的包装类首字母大写。
| 类型 | 说明 |
|---|---|
int | 32 位有符号整数 |
long | 64 位有符号整数 |
double / float | 浮点数 |
boolean | true 或 false |
char | 单个 16 位 Unicode 字符 |
byte / short | 8 位 / 16 位整数 |
String | 不可变的文本(是类,不是基本类型) |
Integer, Double, Boolean | 基本类型的包装类 |
var | 局部变量类型推断(Java 10+) |
变量
| 操作 | 语法 |
|---|---|
| 声明并初始化 | int x = 5; |
| 类型推断(局部变量) | var name = "Ada"; |
| 常量 | final double PI = 3.14159; |
| 字符串拼接 | String s = "Hi " + name; |
| 字符串转 int | int n = Integer.parseInt("42"); |
| int 转字符串 | String s = String.valueOf(42); |
| 格式化字符串 | String.format("%d items", n) |
运算符
算术、比较、逻辑和赋值运算符。
| 运算符 | 含义 |
|---|---|
+ - * / % | 加、减、乘、除、取模 |
++ -- | 自增 / 自减 |
== != | 等于 / 不等于(对象比较的是引用) |
> < >= <= | 大于 / 小于比较 |
&& || ! | 逻辑与、或、非(短路求值) |
& | ^ ~ | 按位与、或、异或、取反 |
<< >> >>> | 左移、有符号右移、无符号右移 |
+= -= *= /= | 复合赋值 |
? : | 三元运算符:x > 0 ? "pos" : "neg" |
instanceof | 类型检查:if (o instanceof String s) |
流程控制
| 语句 | 语法 |
|---|---|
| If / else | if (x > 0) { ... } else { ... } |
| switch 语句 | switch (n) { case 1: ...; break; default: ...; } |
| switch 表达式 | var s = switch (n) { case 1 -> "one"; default -> "other"; }; |
| while 循环 | while (i < n) { ... } |
| do-while 循环 | do { ... } while (i < n); |
| for 循环 | for (int i = 0; i < n; i++) { ... } |
| 增强 for(for-each) | for (String item : list) { ... } |
| Break / continue | break; 退出循环,continue; 跳到下一次迭代 |
字符串方法
String 是不可变的,每个方法都会返回一个新字符串。在循环里拼接字符串时,请用 StringBuilder。
| 方法 | 作用 |
|---|---|
s.length() | 字符个数 |
s.charAt(i) | 索引 i 处的字符 |
s.substring(a, b) | 截取从 a(包含)到 b(不包含)的部分 |
s.indexOf("x") | 子串第一次出现的索引,找不到返回 -1 |
s.contains("x") | 包含该子串时返回 true |
s.replace("a", "b") | 替换所有匹配项 |
s.split(",") | 拆分成 String[] |
s.trim() / s.strip() | 去掉首尾空白字符 |
s.toUpperCase() / toLowerCase() | 转换大小写 |
s.equals(t) / equalsIgnoreCase(t) | 比较值(不要用 ==) |
s.startsWith("x") / endsWith("x") | 判断前缀 / 后缀 |
String.join(",", list) | 用分隔符连接各个元素 |
Math 与常用工具方法
来自 java.lang.Math 和数字包装类的静态工具方法。
| 调用 | 结果 |
|---|---|
Math.max(a, b) / Math.min(a, b) | 两个值中较大 / 较小的一个 |
Math.abs(x) | 绝对值 |
Math.pow(x, y) | x 的 y 次方(返回 double) |
Math.sqrt(x) | 平方根 |
Math.round(x) / floor / ceil | 四舍五入 / 向下取整 / 向上取整 |
Math.random() | [0.0, 1.0) 范围内的随机 double |
Integer.parseInt("42") | 把字符串解析成 int |
Integer.MAX_VALUE / MIN_VALUE | int 的最大值 / 最小值 |
Arrays.sort(arr) | 原地排序数组 |
Arrays.toString(arr) | 输出可读的数组内容 |
方法
| 操作 | 语法 |
|---|---|
| 定义方法 | int add(int a, int b) { return a + b; } |
| 无返回值 | void greet() { ... } |
| 静态方法 | static int square(int x) { return x * x; } |
| 公共方法 | public String getName() { return name; } |
| 可变参数 | int sum(int... nums) { ... } |
| 调用方法 | int r = add(2, 3); |
| 调用静态方法 | Math.max(a, b); |
| 方法重载 | int max(int a, int b) 和 double max(double a, double b) |
类与面向对象
| 操作 | 语法 |
|---|---|
| 定义类 | public class Dog { ... } |
| 字段 | private String name; |
| 构造方法 | public Dog(String name) { this.name = name; } |
| 创建对象 | Dog d = new Dog("Rex"); |
| Getter / setter | public String getName() { return name; } |
| 继承 | class Puppy extends Dog { ... } |
| 接口 | interface Runnable { void run(); } |
| 实现接口 | class Task implements Runnable { ... } |
| 重写方法 | @Override public void speak() { ... } |
Record、枚举与现代 Java
用于数据载体和固定取值集合的简洁现代语法(Java 14+)。
| 特性 | 语法 |
|---|---|
| Record(不可变数据) | record Point(int x, int y) {} |
| 使用 record | var p = new Point(1, 2); p.x(); |
| 枚举 | enum Day { MON, TUE, WED } |
| 带值的枚举 | enum Coin { PENNY(1), DIME(10); ... } |
| 文本块 | String s = """\n multi\n line\n """; |
instanceof 模式匹配 | if (o instanceof String s) { s.length(); } |
| switch 模式匹配(Java 21) | case Integer i -> ...; case String s -> ...; |
| 密封类 | sealed interface Shape permits Circle, Square {} |
集合
java.util 中的泛型集合。
| 类型 | 用途与示例 |
|---|---|
ArrayList<T> | 动态数组:list.add(1); list.get(0); list.size(); |
HashMap<K, V> | 键值对:map.put("a", 1); map.get("a"); |
HashSet<T> | 不重复的值:set.add(5); set.contains(5); |
LinkedList<T> | 双向链表,适合当队列 / 双端队列用 |
ArrayDeque<T> | 栈 / 队列:dq.push(x); dq.pop(); |
| 数组 | int[] nums = {1, 2, 3}; |
| 遍历列表 | for (T x : list) { ... } |
| 遍历 map | for (var e : map.entrySet()) { e.getKey(); e.getValue(); } |
Stream 与 Lambda
对集合进行函数式风格的流水线处理(Java 8+)。
| 操作 | 语法 |
|---|---|
| Lambda 表达式 | x -> x * 2 |
| 创建 Stream | list.stream() |
| 过滤 | .filter(n -> n > 0) |
| 映射 / 转换 | .map(n -> n * 2) |
| 排序 | .sorted() 或 .sorted(Comparator.reverseOrder()) |
| 归约 / 求和 | .reduce(0, Integer::sum) |
| 计数 / 匹配 | .count(), .anyMatch(n -> n > 5) |
| 收集为列表 | .collect(Collectors.toList()) |
| 逐个处理 | .forEach(System.out::println) |
常用写法(try/catch、泛型)
| 写法 | 语法 |
|---|---|
| Try / catch | try { ... } catch (Exception e) { ... } |
| 捕获特定异常 | catch (IOException e) { ... } |
| Finally | finally { ... } 总会执行 |
| Try-with-resources | try (Scanner sc = new Scanner(...)) { ... } |
| 抛出异常 | throw new IllegalArgumentException("bad"); |
| 泛型类 | class Box<T> { T value; } |
| 泛型方法 | <T> T first(List<T> list) { ... } |
| 有界类型 | <T extends Number> |
最常用的 Java 语法、集合和 Stream 操作,全都在这一页。这份 Java 速查表是写 Java 时的快速参考:数据类型、流程控制、类、ArrayList/HashMap 集合、Stream API,还有每天都会用到的异常处理和泛型写法。
这里的内容都是标准 Java(Java 8 及以上版本),可以用 javac 编译。需要什么就复制什么,也可以在 Java 在线编辑器里直接运行每个代码片段,无需安装 JDK。刚开始学 Java?Coddy 的免费交互式 Java 课程会一步步讲解这些概念。
Java 速查表常见问题
这份 Java 速查表免费吗?
免费。这份 Java 速查表完全免费,也不用注册。把它加入书签,需要查语法、集合或 Stream 操作时随时回来看。
Java 中 == 和 .equals() 有什么区别?
== 比较的是引用,也就是两个变量是否指向同一个对象;.equals() 比较的是内容。两个文本相同但不同的 String 对象用 .equals() 比较结果为真,用 == 比较却可能为假。比较字符串和其他对象的值时,一律用 .equals();== 只用于基本类型(int、boolean 等)或判断是否为 null。Java 中的 Stream 有什么用?
filter、map、sorted、reduce、collect,不必手写循环。先调用 list.stream(),再串联中间操作,最后用 collect(Collectors.toList()) 或 forEach 这样的终止操作收尾。这样写出的数据转换代码简洁又清晰。可以在线练习 Java 吗?
可以。打开 Java 在线编辑器,就能在浏览器里编译并运行这份速查表中的任何代码片段,无需安装 JDK。想系统地学,Coddy 的免费交互式 Java 课程会带你从变量和循环一步步学到类、集合和 Stream。
这份速查表适合初学者吗?
适合。内容从最常用的基础(类型、流程控制、方法)排到进阶内容(Stream、泛型、异常),第一天就能用上前面几部分,其余的可以慢慢掌握。
Java 中怎么把 String 转成 int?
Integer.parseInt("42") 得到基本类型 int,用 Integer.valueOf("42") 得到 Integer 对象。字符串不是合法数字时,两者都会抛出 NumberFormatException,所以输入不可信时要用 try / catch 包起来。反过来转换,用 String.valueOf(n) 或 Integer.toString(n)。Java 中 ArrayList 和数组有什么区别?
int[] a = new int[5])的长度在创建时就固定了,可以直接存放基本类型。ArrayList<T> 能通过 add() 和 remove() 动态增减,但只能存对象,所以基本类型会自动装箱(ArrayList<Integer>)。大小已知且固定时用数组,集合大小会变化时用 ArrayList。