---
aliases: []
tags:
- PL
- java
- jdk
- Eclipse
- dbeaver
created: 2023-01-30 11:19:11
modified: 2026-03-23 18:23:04
---
# Java ç¬è®°
---
## ç®å½
* [JDK](#java_jdk)
* [Open JDK](#OpenJDK)
* [JRE](#java_jre)
* [JVM](#java_jvm)
* [IDE](#java_ide)
* [Javaç¸å
³çé
ç½®](#java_config)
* [SDKMan](#java_sdkman)
* [IO ç¸å
³](#java_io)
* [彿°ç¼ç¨ç¸å
³](#java_functaional)
---
## JDK
ä¸åççæ¬æä¸åç JDKï¼ä¸ååå乿ä¸åç JDKãèé [Oracle](https://www.oracle.com/) ç JDK åæºäºãOpenJDKãã
### OpenJDK
> [!info] å
³äº OpenJDK
> OpenJDK æ¯ç± **OpenJDK Community ãOracleãIBM** é¢å¯¼ï¼è¿å Alibabaï¼Amazonï¼Ampereï¼Azulï¼BellSoftï¼Canonicalï¼Fujitsuï¼Googleï¼Huaweiï¼Intelï¼Java Communityï¼JetBrainsï¼London Java Communityï¼Microsoftï¼Red Hatï¼SAPï¼SouJavaï¼SUSEï¼Tencentï¼Twitter ï¼VMWare çç¬¬ä¸æ¹å
±åå¼åãç»´æ¤ç Java SE 弿ºåèå®ç°ã
[OpenJDK](https://openjdk.org) ä¸ Oracke JDK åºå«ï¼
* Oracle JDK åªåå¸äºè¿è¡çæ¬ï¼OpeanJDK åªåæºç
* Oracle JDK å
å«äº OpenJDK å°é没æçåè½
* ä» Java SE7 å¼å§å¾åççæ¬ï¼ææ JDK 齿ºäº OpenJDKãæä»¥ä»æç§æä¹ä¸è®²ï¼Oracle JDK 乿¯ OpenJDK çä¸ä¸ªåççã
* Oracle JDK ææ Java åæ ï¼å
¶ä» OpenJDK ä¸è½ä½¿ç¨ Java åæ ã
* ææä¸åï¼OpeanJDK å
许å
è´¹åç¨ï¼è Oracle JDK åªè½ä¸ªäººç 究使ç¨ï¼åç¨æ¶è´¹ï¼ä» JDK8u211 è¿çæ¬å¼å§ï¼
广ä¹ä¸çãOpenJDKãæçæ¯é Oracle JDK ä¹å¤ææååæºäº OpenJDK æºç èªè¡å®å¶ç¼è¯åå¸ç OpenJDK åè¡çã
çä¹ä¸çãOpenJDKã䏿 **Oracle OpenJDK**ï¼æä»¥ OpenJDK å®ç½æåå¯ä¸è½½çäºè¿å¶æä»¶å
¶å®æ¯ Oracle OpenJDK å°åï¼å®å
¶å®å°±æ¯ Oracle çç OpenJDK åè¡çãä¹å°±æ¯è¯´ï¼Oracle é¤äºåæç JDK çï¼è¿æä¸ä¸ª OpenJDK çæ¬ -- æ
åµè· RHEL ä¸ CenterOS å
³ç³»ä¸æ ·ã
åè¡çç OpenJDK 大é¨å齿¯å¯ä»¥ **å
è´¹åç¨** çï¼åç¨ä»è´¹çä»£è¡¨æ¯ Oracle JDK å IBMãRedHat ç OpenJDKã
èä¸åçåå伿 ¹æ® OpenJDK æºèªè¡å®å¶ç¼è¯èªå·±çäºè¿å¶åè¡çæ¬ãä¸é¢å°±ä»ç»å 个ï¼
#### Oracle OpenJDK
ä¸é¢å·²ç»è¯´äºï¼**çä¹** ä¸ç OpenJDK å°±æ¯æãOracle's OpeanJDKãã
å®ç½ï¼[https://openjdk.org](https://openjdk.org)ã
åå¤§çæ¬ï¼
* [OpenJDK 11](https://jdk.java.net/java-se-ri/11)
* [OpenJDK 17](https://jdk.java.net/java-se-ri/17)
#### Eclipse Temurin
[Adopt JDK](https://adoptium.net) åæ¥æ¯ OpenJDK ä¸ç¤¾åº JDK 䏿¯è¾éè¦çä¸ä¸ªåè¡çã忥 **AdoptOpenJDK** å å
¥å°äº [Eclipse](https://www.eclipse.org/org/) åºé伿ä¸ç [Adoptium](https://adoptium.net) å·¥ä½ç»ï¼ãAdoptium Working Groupãï¼ï¼åæ´å为ãTemurin JDKãã[Temurin](https://adoptium.net/temurin/) æ¯ãAdoptiumãå
¶ä¸ä¸ä¸ªé¡¹ç®ï¼Projectï¼ï¼ä¸é¨æä¾ç产ç¯å¢ç JRE æ JDK åç¸å
³ææ¯ã
å®ç½ä¹ä» [https://adoptopenjdk.net](https://adoptopenjdk.net) è¿ç§»å° [https://adoptium.net](https://adoptium.net)ã
Temurin JDK æ¸
åéåï¼[https://mirror.tuna.tsinghua.edu.cn/Adoptium/](https://mirror.tuna.tsinghua.edu.cn/Adoptium/)
大é¨å Open JDK é½è½ä½¿ç¨ [SDKMan](#SDKMan) å®è£
ã
#### 微软 OpenJDK
没æ³å°å§ï¼å¾®è½¯ä¹æå OpenJDKã
> [!inof] å¾®è½¯ä¸ [Eclipse](#Eclipse%20ç¸å
³)
>
> 2021 å¹´ 8 æï¼å¾®è½¯å®£å¸å°æä¸º Eclipse åºéä¼çæç¥æåï¼å¹¶ä¸å å
¥å
¶è£äºä¼ã
>
> æ©å¨ 2016 å¹´ï¼å¾®è½¯å°±ä»¥è§£å³æ¹æ¡æåç身份å å
¥äº Eclipse åºéä¼ï¼å¹¶å¨å½æ¶æä¾äºä¸å¥å¼åå·¥å
·åæå¡ã
>
> å¯è§å¾®è½¯çãéçªãå·²ç»ä¼¸å Java ç³»çé¢åãäºå®æ¯ [Visual Studio](https://visualstudio.microsoft.com/) å¨ ãVS2015ãçæ¬æ¶ï¼å¨å
¶å®è£
é项ä¸å°±æ JDK é项ï¼å½æ¶è¿æ¯é对 [Android](https://developer.android.google.cn/)ãä½ç°å¨çæ¥ï¼å¾®è½¯çéå¿å¯ä¸æ¢è¿ä¹çªãä» [dotnet core](https://dotnet.microsoft.com/) [](https://github.com/dotnet/core) å°æ¶è´ [Github](https://github.com)ï¼å¾®è½¯è¿å¹´å¯¹äºåæ¥éå¾®è½¯ä¼ ç»é¢åï¼ç¹å«æ¯å¼æºé¢åçæ¶è¶³è¶æ¥è¶å¤ã
å®ç½ï¼[https://www.microsoft.com/openjdk](https://www.microsoft.com/openjdk)
æºç å°åï¼[https://github.com/microsoft/openjdk](https://github.com/microsoft/openjdk)
---
### JDK8
æ°ççæ¬ JDK8 çé¨åå½ä»¤æ´æ¹ã
`java` å `javac` æ¥ççæ¬ä¿¡æ¯ç ` --version` éé¡¹å·²ç»æ²¡æäºï¼åªå©ä¸ `-version` æ¹å¼å¯æ¥ç jdk8 ççæ¬ä¿¡æ¯ã
æä»¥å¨æ°çæ¬ jdk8 䏿¥ççæ¬ä¿¡æ¯åªè½ä½¿ç¨ï¼`java -version` å `javac -version`ã
ä½ç¦»å¥çæ¯ï¼å¨ [JDK11](#JDK11) å [JDK17](#JDK17) ä»ä¿æ `--version` è¿ç§ç¨æ³ãçæµæ¯æ³è¦æ java 8 è·åç»§ççæ¬ãåºéãå¼ï¼èä¸ç»é£äºä»ä½¿ç¨ java8 çãéåæ·ãç¨åºåä¸ä¸ªå¥½å java8 ç¨ä¸äºçãéè§ãã
> [!info] å
³äº version é项
>
> éè¿ java ç帮å©å¯ä»¥ç¥éä¸¤ç§ `version` æ¯æä¸ç¹åºå«çã
>
> `-version` å°äº§åçæ¬è¾åºå°é误æµå¹¶éåº
>
> `--version` å°äº§åçæ¬è¾åºå°è¾åºæµå¹¶éåº
#### æ°ç¹æ§
##### é»è®¤æ¹æ³
ãé»è®¤æ¹æ³ãï¼å称为ã**æ©å±æ¹æ³**ãï¼ä½¿ç¨ `default` å
³é®åè¿è¡ä¿®é¥°ã
é»è®¤æ¹æ³**å¿
é¡»**ææ¹æ³çå®ç°ï¼å³**å¿
é¡»ææ¹æ³ä½**ã
ä½è®¿é®æ¶ï¼ä¸è½éè¿æ¥å£ç´æ¥è®¿é®é»è®¤æ¹æ³ï¼å¿
é¡»éè¿æ¥å£çå®ç°ç±»çå®ä¾è¿è¡è®¿é®ï¼
```java
对象å.é»è®¤æ¹æ³()
```
##### éææ¹æ³
Java8 å¼å§å
è®¸å¨æ¥å£ä¸å®ä¹éææ¹æ³ï¼æ¤æ¹æ³ä½¿ç¨ `static` å
³é®å修饰ã
æ¥å£ä¸çéææ¹æ³ï¼ä¸ [é»è®¤æ¹æ³](#é»è®¤æ¹æ³) 䏿 ·ï¼å¿
é¡»è¦ææ¹æ³ä½ã
éææ¹æ³æ¢å¯ä»¥éè¿æ¥å£åè¿è¡è®¿é®ï¼ä¹å¯ä»¥éè¿æ¥å£å®ç°ç±»çå®ä¾è¿è¡è®¿é®ï¼
```java
æ¥å£å.éææ¹ç¤ºå()
```
##### 彿°æ¥å£
ã[彿°æ¥å£](Java_Funcational_Note.md#Functional%20Interface) ãæ¯ JDK8 æéè¦çç¹æ§ã
[lambda](#lambda)ã[æ¹æ³å¼ç¨](#æ¹æ³å¼ç¨)ã[optional](#optional) çç¹æ§é½æ¯å´ç»ç彿°æ¥å£èå¶å®çæ°åè½ã
##### lambda
##### æ¹æ³å¼ç¨
##### optional
##### Stream API
##### Base64
##### å¹¶è¡æ°ç»
### JDK11
### JDK17
### JDK21
### JDK25
---
## JRE
Java Runtime Environmentï¼Java è¿è¡æ¶ç¯å¢ã
JRE æ¯è¿è¡ Java ç¨åºçå¿
å¤ç¯å¢ï¼å
å« JVM åç±»åºï¼ç¡®ä¿ Java ç¨åºå¨ä¸åå¹³å°ä¸é¡ºå©æ§è¡ã
Java ç JREï¼Java Runtime Environmentï¼ç¨äºè¿è¡ Java åºç¨ç¨åºãå®å
å«ä»¥ä¸ä¸»è¦ç»ä»¶ï¼
1. Java èææºï¼[JVM](#JVM)ï¼
* è´è´£æ§è¡ Java åèç ï¼ç¡®ä¿ Java ç¨åºè·¨å¹³å°è¿è¡ã
2. Java ç±»åºï¼Java Class Libraryï¼
* æä¾æ ååºï¼æ¯ææä»¶æä½ãç½ç»éä¿¡ãæ°æ®ç»æçåè½ã
3. å
¶ä»æ¯ææä»¶
* å
æ¬é
ç½®æä»¶ãèµæºæä»¶çï¼ç¡®ä¿ Java ç¨åºæ£å¸¸è¿è¡ã
### 主è¦åè½
* **è¿è¡ Java ç¨åº**ï¼JRE æä¾æ§è¡ Java åºç¨ç¨åºæéçç¯å¢ã
* **è·¨å¹³å°æ¯æ**ï¼éè¿ [JVM](#JVM) å®ç°ã䏿¬¡ç¼åï¼å°å¤è¿è¡ãã
### ä¸ JDK çåºå«
* **JRE**ï¼ä»
ç¨äºè¿è¡ Java ç¨åºã
* **JDK**ï¼å
å« JRE åå¼åå·¥å
·ï¼å¦ç¼è¯å¨ãè°è¯å¨ï¼ï¼ç¨äºå¼ååç¼è¯ Java ç¨åºã
---
## JVM
JVM Java èææºã
---
## Java ç¸å
³çé
ç½®
### Java11 çæ JRE
è¿å
¥ jdk å®è£
ç®å½åæ§è¡ä»¥ä¸å½ä»¤ï¼
```shell
sudo ./bin/jlink --module-path jmods --add-modules java.desktop --output jre
```
>[!info]
>
> æ jmodes ç®å½æææ¨¡åé½çæ [JRE](#JRE)ï¼
>
> ```shell
> sudo ./bin/jlink --module-path jmods --add-modules ALL-MODULE-PATH --output jre
> ```
---
## IDE
### Eclipse
* [Eclipse ç¬è®°](IDE/Java_IDE_Eclipse.md)
### IDEA
* [Idea ç¬è®°](IDE/Java_IDE_Idea.md)
---
## SDKMan
[SDKMan](https://sdkman.io/) æ¯ä¸ä¸ª Linux ç³»ç»ä¸å¯¹ java ç¸å
³ç软件管çå¨ãå®è½å¤å¯¹è½¯ä»¶å®è£
ãå¸è½½ãçæ¬åæ¢ã
### SDKMan å®è£
æ§è¡ä»¥ä¸å½ä»¤ï¼
```shell
curl -s "https://get.sdkman.io" | bash
```
sdkman å®è£
ç®å½æ¯å¨ `~/.sdkman/` ä¸ï¼è£
å®äºçå° `.sdkman` ä¸ææ²¡æ `bin` ç®å½ï¼å 为å½å¤ç½ç«çå
³ç³»ï¼æå¯è½å¨å®è£
è¿ç¨ï¼å 为ç½ç»ç¯å¢èäºå®ä¸æ²¡çæ£å®è£
æåï¼å¦ææ¯è¿æ ·ï¼å¨ `.sdkman` ç®å½ä¸æ¯ç¼ºå° bin ç®å½çã
### é
ç½®ç¯å¢åé
å¾ `.bashrc` æ `.bash_profile` æ `.profile` æä»¶ï¼æ sdkman çè·¯å¾å è¿å»ï¼
```config
export SDKMAN_DIR="/home/silascript/.sdkman"
```
æè
ï¼
```shell
source "/Users/sky/.sdkman/bin/sdkman-init.sh"
```
è¿ä¼èªå¨å°ç¸å
³çé
ç½®å å
¥å°ç¸åºçé
ç½®æä»¶ï¼æå¯è½æ¯ `.bashrc`ï¼ä¹æå¯è½æ¯ `.zshrc`ï¼å¦æç¨ zshï¼ã忣å»çä¸å§ï¼å¤§æ¦æ¯ä»¥ä¸è¿ä¸æ®µä»£ç ï¼
```config
export SDKMAN_DIR="$HOME/.sdkman"
[[ -s "$HOME/.sdkman/bin/sdkman-init.sh" ]] && source "$HOME/.sdkman/bin/sdkman-init.sh"
```
> [!tip] é
ç½®æä»¶ç»éª
>
> åæ£è¿æ®µä»£ç æ ¹æ®ä½ èªå·±ä¹ æ¯ï¼å¯ä»¥ç§»å¨å°éåç rc æ profile æä»¶ä¸ã
>
> æä¸ªäººæ¯æ¾å¨ `.profle` ä¸ï¼ææè¯è¨çç¯å¢åéé
ç½®æé½æ¾å¨ `.profile` ä¸ï¼ç¶åæåç¨ zshï¼æå°±å¨ `.zshrc` ä¸ `source` ä¸ `.profile`ï¼è¿æ ·è½ä¿æ `.zhsrc` æä»¶ä¸è³äºå¤ªå¤é zsh çé
置信æ¯ï¼èä¸é䏿¾å¨ `.profile` ä¸ä¹è½éä¸ç®¡çã
### SDKman 使ç¨
ä½¿ç¨ `sdk help` è½æ¥ç SDKMan 帮å©ï¼è¿ä¸ªå¸®å©å·²ç»æ¶µçäº SDKMan å 乿æå¸¸ç¨æä½ã
SDKMane è¯æ³ `sdk