JDK是[Java](https://baike.baidu.com/item/Java/85979)語言的[軟件開發工具包](https://baike.baidu.com/item/%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7%E5%8C%85/10418833),主要用于[移動設備](https://baike.baidu.com/item/%E7%A7%BB%E5%8A%A8%E8%AE%BE%E5%A4%87/9157757)、[嵌入式設備](https://baike.baidu.com/item/%E5%B5%8C%E5%85%A5%E5%BC%8F%E8%AE%BE%E5%A4%87/10055189)上的java應用程序。JDK是整個java開發的核心,它包含了JAVA的運行環境(JVM+Java系統類庫)和JAVA工具。
JDK = Java soft Development Kit Java軟件開發工具包。在一些其它語言開發的介紹中,我們還可以看到SDK,就是這里的Soft Development Kit。比如進行手機開發時我們需要的Android SDK,便是指安卓軟件開發工具包。
汽車廠商為了更加高效的制造汽車,會開發更高端的平臺,比如2019年的邁騰汽車使用的是MQB平臺,除此以外還會電力、材料、人工等輔助的資源。新的車型設計后會進行小范圍的生產,然后在測試場里或者實際的道路上進行測試,發現問題后分析問題并進行修正。最后才是量產汽車。
在JAVA開發的世界里,我們把測試場和實際的道路稱為JRE,即JAVA運行環境。汽車跑起來需要公路這個`汽車運行環境`,JAVA跑起來則需要JRE這個JAVA運行環境(Java Runtime Environment)。汽車在生產的過程中,需要MQB及一些輔助資源。JAVA程序在生產的過程中,也是需要JAVA及一些輔助的資源,而這就是Kit。
所以:我們做為消費者,買了汽車想使用的話,那么就是需要有汽車運行環境公路;如果買了JAVA軟件想使用的話,就需要有JAVA軟件運行環境--JRE。如果我們做為生產者想生產汽車,除了要有汽車運行環境外,還需要有生產平臺及輔助資源;想生產JAVA程序,除了有JRE以外,則還需要一些工具包,這合并稱為JDK。

如上圖所示:JRE是JDK的一部分,如果想開發JAVA程序,則必須有JDK。如果想運行JAVA程序,就必須有JRE。
*****
有人說2019年以后JAVA不在免費了,其實這個是誤區。JAVA依舊免費,只是:1. 2019年4月以后對JAVA8的更新,不在免費提供了。2. JDK11時,免費用戶需要使用OPENJDK。對我們的直接影響是:下載時需要進行登錄了,而想登錄成功則依賴于良好的網絡。我們改用以下下載地址:[https://github.com/frekele/oracle-java/releases/tag/8u172-b11](https://github.com/frekele/oracle-java/releases/tag/8u172-b11)
> 該版本并不是必須的,但使用該版本該將在最大程度上與教程的保持一致,這可能會規避一些不必要的麻煩。其它版本下載地址:[https://github.com/frekele/oracle-java/releases](https://github.com/frekele/oracle-java/releases)。同時阿里巴巴在OPENJDK8的基礎上,開發了并開源了[dragonwell8](https://github.com/alibaba/dragonwell8),有興趣的話也可以了解一下。
## MACOS
如果你已經安裝過其它版本的JDK了,可以參考[https://segmentfault.com/a/1190000020177762#articleHeader5](https://segmentfault.com/a/1190000020177762#articleHeader5)進行多版本的安裝與切換。
### 下載
在mac上,我們可以使用`Homebrew`來安裝`jdk8`,`Homebrew`是一款Mac OS平臺下的軟件包管理工具,擁有安裝、卸載、更新、查看、搜索等很多實用的功能( 以下操作均在終端進行 )。
首先更新`Homebrew`軟件倉庫。
```
brew tap caskroom/versions
```
下載`openjdk8`:
```
brew cask install adoptopenjdk/openjdk/adoptopenjdk8
```
### 驗證
```
java -version
```

## ubuntu
### 下載
選擇適合自己電腦的版本,點擊下載

### 解壓
進入下載目錄解壓,可以使用右鍵,選擇提取到,之后選擇jdk安裝的位置;也可以使用命令進行解壓,在命令行中進入jdk的存放目錄,輸入解壓命令:
`sudo tar -zxvf 文件名-C 解壓到的目錄(不寫則為當前目錄)`

### 設置環境變量
>[success] 本文的vim命令都是在輸入法為英文且小寫模式下。
在命令行中運行
`sudo vim ~/.bashrc`
(在vim中按下`i`進入插入模式)
在文件末尾追加下面內容(`shift + g`可以直接到文末 ):
```
#set jdk environment
export JAVA_HOME=/media/liyiheng/1/opt/jdk1.8.0_172 ?## 這里要注意目錄要換成自己解壓的jdk 目錄, 這句話需要刪除
export JRE_HOME=${JAVA_HOME}/jre??
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib??
export PATH=${JAVA_HOME}/bin:$PATH
```
按下`esc`,輸入:`:wq`保存;
使環境變量馬上生效:
`source ~/.bashrc`
### 驗證

### 不適合這里的一個簡單方法
當以后不需要和本教程版本保持同步時,可以使用一條簡單的命令來安裝openjdk
`sudo apt install openjdk-8-jdk `
不過現在還是希望你能和本教材的jdk版本保持一致。
## windows
### 下載
點擊下載鏈接:[https://github.com/frekele/oracle-java/releases/tag/8u172-b11](https://github.com/frekele/oracle-java/releases/tag/8u172-b11),如果你的電腦是32位,點擊`jdk-8u172-windows-i586.exe`,如果你的電腦是64位,點擊`jdk-8u172-windows-x64.exe`。

### 安裝
下載完成后,點擊下載程序進行`jdk8`的安裝


記住這個`jdk8`的安裝目錄:

選擇`jre`安裝目錄(建議使用默認安裝目錄),點擊下一步:


配置`jdk8`環境變量:
為了使用`jdk`的命令,我們需要配置`JAVA_HOME`,`CLASS_PATH`,`PATH`這幾個環境變量:
打開文件資源管理器,右鍵此電腦,點擊屬性:

點擊高級系統設置,點擊環境變量:

如果存在`JAVA_HOME`變量,則選中,點擊編輯。否則,點擊新建:

變量名輸入`JAVA_HOME`,點擊瀏覽目錄選擇剛剛`jdk8`的安裝路徑,確定:

如果存在`CLASSPATH`則選中,編輯。否則,點擊新建:
```
變量名:CLASSPATH
變量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
```

找到PATH環境變量,點擊編輯:

點擊新建,添加:
```
%JAVA_HOME%\bin
```

點擊確定,到此,環境變量就全都配置完成了。
### 驗證
打開終端,輸入
```
C:\User\98173> java -version
```

到此,`jdk8`已經安裝成功了。
- 序言
- 第一章:Hello World
- 第一節:Angular準備工作
- 1 Node.js
- 2 npm
- 3 WebStorm
- 第二節:Hello Angular
- 第三節:Spring Boot準備工作
- 1 JDK
- 2 MAVEN
- 3 IDEA
- 第四節:Hello Spring Boot
- 1 Spring Initializr
- 2 Hello Spring Boot!
- 3 maven國內源配置
- 4 package與import
- 第五節:Hello Spring Boot + Angular
- 1 依賴注入【前】
- 2 HttpClient獲取數據【前】
- 3 數據綁定【前】
- 4 回調函數【選學】
- 第二章 教師管理
- 第一節 數據庫初始化
- 第二節 CRUD之R查數據
- 1 原型初始化【前】
- 2 連接數據庫【后】
- 3 使用JDBC讀取數據【后】
- 4 前后臺對接
- 5 ng-if【前】
- 6 日期管道【前】
- 第三節 CRUD之C增數據
- 1 新建組件并映射路由【前】
- 2 模板驅動表單【前】
- 3 httpClient post請求【前】
- 4 保存數據【后】
- 5 組件間調用【前】
- 第四節 CRUD之U改數據
- 1 路由參數【前】
- 2 請求映射【后】
- 3 前后臺對接【前】
- 4 更新數據【前】
- 5 更新某個教師【后】
- 6 路由器鏈接【前】
- 7 觀察者模式【前】
- 第五節 CRUD之D刪數據
- 1 綁定到用戶輸入事件【前】
- 2 刪除某個教師【后】
- 第六節 代碼重構
- 1 文件夾化【前】
- 2 優化交互體驗【前】
- 3 相對與絕對地址【前】
- 第三章 班級管理
- 第一節 JPA初始化數據表
- 第二節 班級列表
- 1 新建模塊【前】
- 2 初識單元測試【前】
- 3 初始化原型【前】
- 4 面向對象【前】
- 5 測試HTTP請求【前】
- 6 測試INPUT【前】
- 7 測試BUTTON【前】
- 8 @RequestParam【后】
- 9 Repository【后】
- 10 前后臺對接【前】
- 第三節 新增班級
- 1 初始化【前】
- 2 響應式表單【前】
- 3 測試POST請求【前】
- 4 JPA插入數據【后】
- 5 單元測試【后】
- 6 惰性加載【前】
- 7 對接【前】
- 第四節 編輯班級
- 1 FormGroup【前】
- 2 x、[x]、{{x}}與(x)【前】
- 3 模擬路由服務【前】
- 4 測試間諜spy【前】
- 5 使用JPA更新數據【后】
- 6 分層開發【后】
- 7 前后臺對接
- 8 深入imports【前】
- 9 深入exports【前】
- 第五節 選擇教師組件
- 1 初始化【前】
- 2 動態數據綁定【前】
- 3 初識泛型
- 4 @Output()【前】
- 5 @Input()【前】
- 6 再識單元測試【前】
- 7 其它問題
- 第六節 刪除班級
- 1 TDD【前】
- 2 TDD【后】
- 3 前后臺對接
- 第四章 學生管理
- 第一節 引入Bootstrap【前】
- 第二節 NAV導航組件【前】
- 1 初始化
- 2 Bootstrap格式化
- 3 RouterLinkActive
- 第三節 footer組件【前】
- 第四節 歡迎界面【前】
- 第五節 新增學生
- 1 初始化【前】
- 2 選擇班級組件【前】
- 3 復用選擇組件【前】
- 4 完善功能【前】
- 5 MVC【前】
- 6 非NULL校驗【后】
- 7 唯一性校驗【后】
- 8 @PrePersist【后】
- 9 CM層開發【后】
- 10 集成測試
- 第六節 學生列表
- 1 分頁【后】
- 2 HashMap與LinkedHashMap
- 3 初識綜合查詢【后】
- 4 綜合查詢進階【后】
- 5 小試綜合查詢【后】
- 6 初始化【前】
- 7 M層【前】
- 8 單元測試與分頁【前】
- 9 單選與多選【前】
- 10 集成測試
- 第七節 編輯學生
- 1 初始化【前】
- 2 嵌套組件測試【前】
- 3 功能開發【前】
- 4 JsonPath【后】
- 5 spyOn【后】
- 6 集成測試
- 7 @Input 異步傳值【前】
- 8 值傳遞與引入傳遞
- 9 @PreUpdate【后】
- 10 表單驗證【前】
- 第八節 刪除學生
- 1 CSS選擇器【前】
- 2 confirm【前】
- 3 功能開發與測試【后】
- 4 集成測試
- 5 定制提示框【前】
- 6 引入圖標庫【前】
- 第九節 集成測試
- 第五章 登錄與注銷
- 第一節:普通登錄
- 1 原型【前】
- 2 功能設計【前】
- 3 功能設計【后】
- 4 應用登錄組件【前】
- 5 注銷【前】
- 6 保留登錄狀態【前】
- 第二節:你是誰
- 1 過濾器【后】
- 2 令牌機制【后】
- 3 裝飾器模式【后】
- 4 攔截器【前】
- 5 RxJS操作符【前】
- 6 用戶登錄與注銷【后】
- 7 個人中心【前】
- 8 攔截器【后】
- 9 集成測試
- 10 單例模式
- 第六章 課程管理
- 第一節 新增課程
- 1 初始化【前】
- 2 嵌套組件測試【前】
- 3 async管道【前】
- 4 優雅的測試【前】
- 5 功能開發【前】
- 6 實體監聽器【后】
- 7 @ManyToMany【后】
- 8 集成測試【前】
- 9 異步驗證器【前】
- 10 詳解CORS【前】
- 第二節 課程列表
- 第三節 果斷
- 1 初始化【前】
- 2 分頁組件【前】
- 2 分頁組件【前】
- 3 綜合查詢【前】
- 4 綜合查詢【后】
- 4 綜合查詢【后】
- 第節 班級列表
- 第節 教師列表
- 第節 編輯課程
- TODO返回機制【前】
- 4 彈出框組件【前】
- 5 多路由出口【前】
- 第節 刪除課程
- 第七章 權限管理
- 第一節 AOP
- 總結
- 開發規范
- 備用