Skip to content

Commit c6ee650

Browse files
committed
[docs add]Java 语法糖详解
1 parent 065aeea commit c6ee650

File tree

5 files changed

+844
-0
lines changed

5 files changed

+844
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
- [BigDecimal 详解](./docs/java/basis/bigdecimal.md)
6363
- [Java 魔法类 Unsafe 详解](./docs/java/basis/unsafe.md)
6464
- [Java SPI 机制详解](./docs/java/basis/spi.md)
65+
- [Java 语法糖详解](./docs/java/basis/syntactic-sugar.md)
6566

6667
### 集合
6768

docs/.vuepress/sidebar.ts

+1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ export const sidebarConfig = defineSidebarConfig({
5757
"bigdecimal",
5858
"unsafe",
5959
"spi",
60+
"syntactic-sugar",
6061
],
6162
},
6263
],

docs/home.md

+1
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ title: JavaGuide(Java学习&&面试指南)
6666
- [BigDecimal 详解](./java/basis/bigdecimal.md)
6767
- [Java 魔法类 Unsafe 详解](./java/basis/unsafe.md)
6868
- [Java SPI 机制详解](./java/basis/spi.md)
69+
- [Java 语法糖详解](./java/basis/syntactic-sugar.md)
6970

7071
### 集合
7172

docs/java/basis/java-basic-questions-03.md

+28
Original file line numberDiff line numberDiff line change
@@ -502,3 +502,31 @@ Java IO 流的 40 多个类都是从如下 4 个抽象类基类中派生出来
502502
### BIO、NIO 和 AIO 的区别?
503503

504504
[Java IO 模型详解](../io/io-model.md)
505+
506+
## 语法糖
507+
508+
### 什么是语法糖?
509+
510+
**语法糖(Syntactic sugar)** 代指的是编程语言为了方便程序员开发程序而设计的一种特殊语法,这种语法对编程语言的功能并没有影响。实现相同的功能,基于语法糖写出来的代码往往更简单简洁且更易阅读。
511+
512+
举个例子,Java 中的 `for-each` 就是一个常用的语法糖,其原理其实就是基于普通的 for 循环和迭代器。
513+
514+
```java
515+
String[] strs = {"JavaGuide", "公众号:JavaGuide", "博客:https://javaguide.cn/"};
516+
for (String s : strs) {
517+
System.out.println(s);
518+
}
519+
```
520+
521+
不过,JVM 其实并不能识别语法糖,Java 语法糖要想被正确执行,需要先通过编译器进行解糖,也就是在程序编译阶段将其转换成 JVM 认识的基本语法。这也侧面说明,Java 中真正支持语法糖的是 Java 编译器而不是 JVM。如果你去看`com.sun.tools.javac.main.JavaCompiler`的源码,你会发现在`compile()`中有一个步骤就是调用`desugar()`,这个方法就是负责解语法糖的实现的。
522+
523+
### Java 中有哪些常见的语法糖?
524+
525+
Java 中最常用的语法糖主要有泛型、自动拆装箱、变长参数、枚举、内部类、增强 for 循环、try-with-resources 语法、lambda 表达式等。
526+
527+
关于这些语法糖的详细解读,请看这篇文章 [Java 语法糖详解](./syntactic-sugar.md)
528+
529+
530+
531+
532+

0 commit comments

Comments
 (0)