>[success] # 安裝Java
1. 通過官網下載 www.sun.com www.oracle.com
2. 若下載的是安裝版,則一路點擊下一步安裝即可, 若下載的是綠色版,則直接解壓即可,**安裝的路徑中不要有
中文,不要有空格等一些特殊的符號**
3. 下載完成后JDK 目錄
| 目錄名稱 | 說明 |
| --- | --- |
| bin | 該路徑下存放了JDK的各種工具命令以及其它的一系列用于開發診斷、分析、調試、管理的工具和命令。javac和java就放在這個目錄。 |
| conf | 該路徑下存放了JDK的相關配置文件。 |
| include | 該路徑下存放了一些平臺特定的頭文件。 |
| jmods | 該路徑下存放了JDK的各種模塊。 |
| legal | 該路徑下存放了JDK各模塊的授權文檔。 |
| lib | 該路徑下存放了JDK工具的一些補充JAR包。 |
| jre| 在java11開始jdk 文件里面就沒有了這個目錄,現在鼓勵的是通過 jlink 自行構建所需的 runtime,理解成按需導入運行環境需要那些使用的api 按需生成對應運行環境支持api即可,參考文章https://blog.csdn.net/zbr0819/article/details/102793155 |
* **java8 對比 java11**
Java 11 中不再單獨提供 JRE,而是將 JRE 的功能合并到了 JDK 中,所以在 Java 11 安裝目錄下并沒有`jre`目錄。同時,Java 11 中還引入了模塊化系統,因此多了一個`jmods`目錄。
| 目錄 | Java 8 | Java 11 | 主要內容 |
| --- | --- | --- | --- |
| bin | jdk1.8.0\_x\\bin | jdk-11\\bin | Java 開發工具和命令行工具 |
| include | jdk1.8.0\_x\\include | jdk-11\\include | Java Native Interface (JNI) 頭文件 |
| jre | jdk1.8.0\_x\\jre | \- | JRE(Java 運行環境)和 Java 應用程序包 |
| lib | jdk1.8.0\_x\\lib | jdk-11\\lib | Java 類庫和支持文件 |
| conf | \- | jdk-11\\conf | JDK 配置文件 |
| legal | \- | jdk-11\\legal | 包含了許可證和版權信息 |
| jmods | \- | jdk-11\\jmods | jmod 文件,Java 模塊化系統的打包形式 |
| include.zip | jdk1.8.0\_x\\include.zip | \- | JNI 頭文件的壓縮包 |
| src.zip | jdk1.8.0\_x\\src.zip | \- | Java 開發工具源碼的壓縮包 |
| demo | jdk1.8.0\_x\\demo | \- | 演示示例 |
| sample | \- | jdk-11\\sample | 示例代碼和演示應用程序 |
| man | jdk1.8.0\_x\\man | jdk-11\\man | JDK 文檔的 Unix 手冊頁 |
>[danger] ##### java 執行運行
1. 開發Java程序,需要三個步驟:**編寫程序,編譯程序,運行程序**
* 編寫程序就是需要安裝java 規范編寫 后綴為 `java` 的文件
* 使用 `javac` 指令執行 **java文件編譯**,將文件轉換成字節碼,產生`class`文件,其中`class` 作為**交給計算機執行的文件**
* 使用 `java` 指令 用來執行`class`文件程序運行
>[danger] ##### 配置環境變量
為了可以在`cmd`任何地方都可以執行 `java` 和 `javac` 兩個指令,需要將兩個執行配置到全局環境中,否則就只能在其腳本目錄文件執行
**配置方式**
`計算機 => 右擊,選擇屬性 => 高級系統設置 => 高級 => 環境變量 => 系統變量 => 找到Path,
點擊編輯 => 將javac.exe所在的路徑信息配置到 Path變量值的最前面,加上英文版的分號 => 一路點擊確定即可`
* **以前下載的老版本**的JDK是沒有自動配置的,而且自動配置的也只包含了4個工具而已,所以我們需要刪掉已經配置完畢的,再次重新配置Path環境變量

以前下載的老版本的JDK是沒有自動配置的,而且自動配置的也只包含了4個工具而已,所以我們需要刪掉已經配置完畢的,再次重新配置Path環境變量。
配置方式將`JDK安裝`在了哪個位置具體位置進行配置,這里設置全局系統環境變量`JAVA_HOME`,在 `path `位置使用變量配置,這樣好處使用其他軟件時候可以直接配置變量`JAVA_HOME`


`bin `文件中可執行的命令更多

* **注意現在最新從官網上下載**的`JDK`安裝時會自動配置`javac`、`java`命令的路徑到Path環境變量中去 ,所以`javac`、`java`可以直接使用
>[danger] ##### win10 失效問題
當電腦重啟之后,環境變量失效了。表示操作系統不支持自定義的環境變量。
**步驟**:
* 還是要配置`JAVA_HOME`給以后的相關軟件去使用
* 我們可以把java和javac的完整路徑配置到PATH當中。**新配置** `JAVA_HOME` 配置 為`C:\JDK\bin` path 為`%JAVA_HOME` 。**老配置**是`C:\JDK` 在path 拼接時候`%JAVA_HOME\bin`
>[danger] ##### 在jdk 中更多指令
1. `java`:這個可執行程序其實就是JVM,運行Java程序,就是啟動JVM,然后讓JVM執行指定的編譯后的代碼;
2. `javac`:這是Java的編譯器,它用于把Java源碼文件(以.java后綴結尾)編譯為Java字節碼文件(以.class后綴結尾);
3. `jar`:用于把一組.class文件打包成一個.jar文件,便于發布;
4. `javadoc`:用于從Java源碼中自動提取注釋并生成文檔;
5. `jdb`:Java調試器,用于開發階段的運行調試。
>[success] # 初識java
1. Java版本`Java SE`、`Java EE`、`Java ME`
* `Java SE ,(Java Platform, Standard Edition)`稱之為 **Java平臺標準版,是 Java平臺的基礎是其他兩個版本的基礎**包含了運行Java應用所需要的**基礎環境**和**核心類庫**還定義了**基于桌面應用的基礎類庫**,通過使用這些類庫 我們可以去寫一些桌面應用
* `Java EE,(Java Platform,Enterprise Edition)`稱之為Java平臺企業版,Java EE構建在Java SE基礎之上,用于構建企業級應用,用于Web方向的網站開發
* `Java ME (Java Platform,Micro Edition)`稱之為Java 平臺微型版,用于嵌入式消費類電子設備或者小型移動設備的開發。為機頂盒、移動電話和PDA等嵌入式消費電子設備提供的Java解決方案
2. `Java SE`就是標準版,包含標準的`JVM和標準庫`,其中 `EE `和 `SE `用的是一套JVM 即java虛擬機,`Java EE`只是在`Java SE`的基礎上加上了大量的`API`和庫,以便方便開發Web應用、數據庫、消息服務等,`ME `比較特殊`SE`無在`ME`上運行,其中`JVM`也是瘦身版本

3. `Java`向下兼容。新的版本只是在原有的基礎上添加了一些新的功能而已,因此高版本可以運行低版本代碼,但低版本代碼不一定能運行高版本(高版本可能用了低版本不支持的api)
>[danger] ##### JDK、JRE、JVM

1. `JDK(Java Development Kit)` 稱為**Java開發工具**,包含了JRE和開發工具,是開發階段使用,安裝了JDK,就無需再單獨安裝JRE了,其中的開發工具:**編譯工具(javac.exe),打包工具(jar.exe)** 等
2. `JRE全稱Java Runtime Environment`即 **java運行環境**,`Jre`大部分都是 C 和 C++ 語言編寫的,他是我們在編譯包含一些核心類庫主要是`java.lang`包:包含了運行Java程序必不可少的系統類,如基本數據類型、基本數學函數、字符串處理、線程、異常處理類等,系統缺省加載這個包,簡單來說 JRE 就是 ** JVM + 核心類庫+運行工具**
二者最大區別在于 如果是開發使用需要安裝`JDK` 使用 `JDK `中的一些開發工具,`JDK` 包含了 `JRE` Java 運行環境,僅僅是想運行一個開發好的`Java`程序,計算機中只需要安裝`JRE`即可,他們關系`JDK 包含JRE 包含 JVM`,如果只有`Java`源碼,要編譯成`Java`字節碼,就需要`JDK`,因為`JDK`除了包含`JRE`,還提供了**編譯器、調試器等開發工具。**
3. JVM全稱`Java Virtual Machine` 即**java虛擬機**,不同平臺有自己虛擬機因此可以跨平臺運行

>[danger] ##### Java語言跨平臺的原理
1. 現在js 運行環境一般都是**v8 引擎**,不同系統環境安裝對應的**v8 引擎** 即可在不同環境下運行`js`,java 同理
將其編譯為擴展名為 `.class` 的字節碼。如果想要**執行字節碼文件**,平臺上面必須安裝`JVM`,`JVM `解釋器會將字節碼解釋成**依賴于平臺的機器碼**


- windows -- 環境變量
- Vscode -- 編寫java
- 初始java
- java -- 關鍵字
- 編寫第一個java程序
- java -- 注釋
- 計算機存儲 -- 進制
- java -- 類型
- java -- 變量
- 數字類型
- 布爾類型
- 字符類型
- 類型轉換
- 雙等比較是什么
- java -- 運算符
- 算數運算符
- 字符串拼接
- 關系/比較運算符
- 自增減運算符
- 邏輯運算符
- 三目運算
- 賦值運算符
- 移位運算符
- 位運算符
- 運算符優先級
- java -- 流程控制語句
- if /else if /if -- 判斷
- switch case分支結構
- for -- 循環
- 用雙重for循環
- while -- 循環
- do while -- 循環
- 案例練習
- java -- 數組
- 數組的存儲
- 數組的增刪改查
- 數組的特點
- 數組案例
- 二維數組
- 數組的工具方法
- java -- 方法
- java -- 方法的重載
- java -- 方法的調用流程
- java -- 類方法傳參注意事項
- java -- 方法練習案例
- 對比 return break continue
- for each循環
- java -- 基礎練習
- java -- 面向對象
- java -- 創建類和對象
- java -- 訪問控制符
- java -- 類成員方法
- java -- 構造方法
- java -- this
- java -- 封裝
- java -- 對象內存圖
- java -- 創建對象案例
- java -- static
- java -- 繼承
- super -- 關鍵字
- java -- 構造塊和靜態代碼塊
- java -- 重寫
- java -- final
- java -- 多態
- java -- 抽象類
- java -- 接口
- 引用類型數據轉換
- 綜合案例
- java -- 內部類
- java -- 回調模式
- java -- 枚舉類型
- java -- switch 使用枚舉
- java -- 枚舉方法使用
- java -- 枚舉類實現接口
- java -- javaBean
- java -- package 包
- java -- import
- java -- 遞歸練習
- java -- 設計模式
- 單例模式
- java -- 注解
- java -- 元注解
- Java -- 核心類庫
- java -- 處理字符串
- Java -- String
- String -- 常用方法
- String -- 正則
- Java -- StringBuilder 和 StringBuffer
- 知識點
- Java -- StringJoiner 字符串拼接
- 練習題
- 字符串的總結
- Java -- 包裝類
- Integer
- Double
- Boolean
- Character
- java -- 集合類
- java -- util.Collection
- Iterator接口
- java -- util.List
- java -- ArrayList
- java -- util.Queue
- java -- util.Set
- java -- util.Map
- java -- util.Collections
- Java -- Math
- Java -- java.lang
- Java -- Object
- Java -- 獲取當前時間戳
- Java -- 異常
- Java -- java.util
- java -- Date
- java -- Calender
- Java -- java.text
- Java -- SimpleDateFormat
- Java -- java.time
- Java -- java.io
- java -- io.File
- java -- 泛型
- IDEA -- 用法