1. Java概述
1.1 Java發展歷史
1990年末SUN(Stanford University Network)公司預料嵌入式系統將在未來的家用電器領域大顯身手,於是SUN公司成立了由James Gosling領導的Green計劃,準備爲下一代智能家電(電視機、微波爐、電話)編寫一個通用的控制系統。
一開始該團隊決定使用C++語言,但是當時的C++不支持跨平臺。因爲不同的家電設備所使用的芯片不同,更換了家電設備則需要修改程序。
因此James Gosling在C++的基礎之上重新開發一門語言-Oak,後來因爲智能家電的市場需求沒有預期的那麼高,SUN公司放棄了該計劃。
隨着20世紀90年代中後期互聯網的發展,SUN公司發現了Oak在互聯網上的應用前景,於是改造Oak語言,並在1995年5月以Java(印度尼西亞爪哇島)的名稱正式發佈。
互聯網的特點和家電設備的特點類似:不同的計算機所使用的硬件設備(芯片)不同。
當時業界爲了使得死板、單調的靜態網頁能夠靈活起來,急需要用一種技術開發動態網頁,這種程序可以通過互聯網訪問,還能夠跨平臺。
得益於Java的跨平臺,而且可以製作Applet逐漸流行起來,Applet是一種將小程序嵌入到網頁中執行的技術。
伴隨着互聯網的迅猛發展,以及Java技術在Web方面的不斷成熟,已經成爲Web應用程序的首選開發語言。
發行版本 | 發行時間 | 備註 |
---|---|---|
Java1.0 | 1996/01/23 | SUN公司發佈了Java的第一個開發工具包 |
Java1.1 | 1997/02/19 | JavaOne會議召開,創造當時全球同類會議之最 |
Java1.2 | 1998/12/08 | Java拆分成:J2SE(Java標準版),J2EE(Java企業版),J2ME(Java微型版) |
Java1.3 | 2000/05/08 | |
Java1.4 | 2004/02/06 | |
Java5.0 | 2004/09/30 | ①版本號從1.4直接升級到5.0 ②Java平臺更名爲JavaSE、JavaEE、JavaME |
Java6 | 2006/12/11 | |
2009/04/20 | Oracle公司用74億美金收購SUN公司 | |
Java7 | 2011/07/02 | Oracle公司收購SUN公司後發佈第一個Java版本 |
Java8 | 2014/03/18 | 此版本是Java5.0以來最大變化的版本,是長期支持版本(LTS) |
Java9 | 2017/09/22 | ①從此版本開始每半年更新一次 ② Java9.0開始不支持32位系統 |
Java10 | 2018/03/21 | 非長期支持版本 |
Java11 | 2018/09/25 | JDK安裝包取消獨立JRE安裝包,是長期支持版本(LTS) |
Java12 | 2019/03/19 | 非長期支持版本 |
Java13 | 2019/09/17 | 非長期支持版本 |
Java14 | 2020/03 | 非長期支持版本 |
Java15 | 2020/09 | 非長期支持版本 |
Java16 | 2021/03 | 非長期支持版本 |
Java17 | 2021/09 | 目前最新長期支持版本,版本號也被稱爲21.9 |
Java18 | 2022/03 | 非長期支持版本 |
Java19 | 2022/09 | 非長期支持版本 |
Java20 | 2023/03 | 非長期支持版本 |
Java21 | 2023/09 |
注意事項
-
Java5和JDK1.5指的是同一個版本,Java8和JDK1.8指的是同一個版本
-
Java7以後Java由Oracle發佈
-
Java8是目前公司使用的主流版本
-
Java9以後每半年發佈一個版本,每3年發佈一個長期支持版本,例如Java8,Java11,Java17是長期支持版本。
1.2 Java特點
由於Java語言是開源的,也得到了很多大公司的支持(Oracle,Amazon,Google,Alibaba、HUAWEI、Tencent)的支持,逐漸發展成了具有簡單易學、開源、跨平臺(可移植)、體系結構中立、安全性、高性能、健壯型、支持面向對象、多線程、分佈式、動態性等諸多特點的開發平臺和運行平臺。
-
Java是簡單易學:Java是C/C++的基礎之上發展而來,不同於C/C++的是Java是純粹的面向對象的語言,Java捨棄了C語言中特別容易引起錯誤的指針,並且引入了垃圾回收機制,這樣在大部分場景下不需要手動釋放內存,而且Java還捨棄了C++語言中一些特別複雜的語法,例如運算分重載、多繼承等等。因此Java相比C/C++更加簡單易學
-
Java是開源的:開源指的就是開放源代碼,例如QQ、微信是不開源的,在下載QQ時只能下載安裝包而不能獲取源代碼,而Linux、Visual Studio Code等等都是開源的,在下載Linux、Visual Studio Code時不僅可以下載安裝包還可以下載源碼,Java開源的好處就是開發者可以通過閱讀Java語言以及相關框架、中間件的源碼查看具體的設計、實現過程,從而提高自己的技術水平。在Java世界中,有着數不清的開源軟件和框架。如Tomcat、Mybatis、Spring Framework、Spring Boot、Spring Cloud、Dubbo,Netty,等。就連JDK自身也有不少實現,如Amazon Corretto、Azul Zulu Community等等。
-
Java是跨平臺的:平臺就是操作系統(OS),目前桌面端主流操作系統是Windows,macOS,服務端操作系統是Linux(CentOS,Ubuntu Server)。跨平臺的含義就是在Windows上開發的項目不需要做任何修改就可以直接在其他安裝了JDK的操作系統(CentOS,Ubuntu Server)上運行,不同操作系統有不同版本的JDK,用來屏蔽底層操作系統的差異。跨平臺的好處就是節省人力資源成本,因爲項目開發一次後適配多個操作系統。在公司開發項目時,首先會在開發環境開發Java項目,項目開發完成以後部署到測試環境進行相關測試,測試通過以後部署到生產環境對外提供服務。不同的環境操作系統也是不一樣的,開發環境使用的Windows或者macOS開發Java項目,測試環境和生產環境使用的Linux來測試Java項目或者部署Java項目對外提供服務。
-
Java是體系結構中立,體系結構中立有兩層含義,①JVM的實現只需要遵守Oracle官方提供的JVM規範即可,不過大部分Java應用都是使用的Oracle官方提供的HotSpot虛擬機,除此以外一些互聯網大廠(HUAWEI、Alibaba、Tencent)會根據自己的需求定製JDK。②JVM除了可以識別Java編譯器(javac)編譯生成的字節碼文件以外,還可以識別Groovy、Scala、 JRuby、Kotlin等計算機語言生成的字節碼文件。
1.3 Java技術體系平臺
自從1998年以後Java被分成了三個版本,這三個版本分別是JavaSE、JavaEE(JakartaEE)、JavaME,每個版本都是有自己的應用場景(開發方向)
-
JavaSE(Java Standard Edition):Java標準版,主要是用於桌面應用的開發,不過目前絕大多數的桌面應用都是使用C/C++開發,很少使用Java開發桌面應用(IntelliJ IDEA),JavaSE是其他兩個版本(JavaEE,JavaME)的基礎,學習JavaSE是爲了以後從事JavaEE開發打基礎。
-
JavaEE(Java Enterprise Edition):Java企業版,主要是用於開發大型企業應用的後臺,JavaEE在這個領域是No.1,所謂的企業應用就是那些商業組織、大型企業創建的應用,例如阿里巴巴的淘寶、天貓、菜鳥物流等大型企業應用的後臺都是基於JavaEE實現的。
-
JavaME(Java Micro Edition):Java微型版,主要用於嵌入式電子設備(電視機、電冰箱、微波爐、烤箱)或者小型移動設備(諾基亞手機)應用開發,但是隨着3G移動智能平臺(Android,iOS)的時代到來,特別是以Java爲核心編程語言的Android平臺的快速普及,JavaME已經淘汰。
如果去招聘網站搜索JavaME會發現搜索不到對應的崗位
JavaSE、JavaEE、JavaME三者之間的關係
1.4 Java應用場景
Java主要是擅長企業級應用開發(大型分佈式系統的後臺開發)、大數據平臺開發、Android應用開發三個開發方向
-
企業級應用開發 :主要指複雜的大企業軟件系統、各種類型網站後臺系統。 Java的安全機制以及它的跨平臺優勢,在大型分佈式系統領域開發中有廣泛應用。包括電商、物流、金融、電信、社交、外賣、出行等。
-
大數據平臺開發 :各類大數據平臺開發框架有 Hadoop,Spark、Flink 等,就這類技術生態圈來講,還有各種中間件如 Flume,Kakfa,Sqoop等,這些框架以及工具大多數是用 Java 編寫而成,但提供諸如 Java,Scala,Python,R等各種語言API。
-
Android應用開發 :Android應用程序使用Java語言編寫,Android開發水平的高低很大程度上取決於 Java是否紮實 。
Java語言是這三個開發方向的基石語言,無論選擇哪個開發方向,首先必須要學習Java語言,然後根據市場的需求再結合自己的興趣選擇對應的開發方向。
根據現在的市場就業形勢,一般大部分人都會選擇企業級應用開發(大型分佈式系統的後臺開發),然後積累2-3年工作經驗以後有興趣可以轉向大數據平臺開發。
基本的學習路線:JavaSE->JavaEE->大數據
1.5 JDK和JRE
1.5.1 JDK和JRE的介紹
-
JDK(Java Development Kit) 稱爲Java開發工具集,JDK包含了Java開發工具(javac,java,jdb,jconsole等等)以及JRE,如果想要開發Java程序之前首先必須安裝和配置JDK
-
JRE(Java Runtime Enviroment)稱爲Java運行時環境,JRE包含了運行Java程序所需要的類庫(數學、集合、正則表達式、日誌、併發、反射、序列化、網絡、日期時間、IO、JDBC)和JVM(Java Virtual Machine),如果想要運行已經開發好的Java程序之前必須要安裝JRE,但是Java11以後不再提供單獨的JRE下載。
Java8體系結構
1.5.2 圖解JDK、JRE和JVM的關係
1.5.3 5.3 如何選擇JDK版本
首先需要了解下Oracle Java SE Support Roadmap
LTS表示Oracle官方長期支持的版本,例如Java8,Java11,Java17,Java21,其中Java8官方支持到2030年12月,Java17官方支持到2029年9月,Oracle官方每3年發佈一個LTS版本
non-LTS表示非Oracle官方長期支持的版本(測試版),例如Java9,Java10,Java12,Java13,Java14等等都是non-LTS版本,Oracle官方每半年(在每年的3月份和9月份)發佈一個non-LTS版本
選擇JDK版本的時候分兩種情況
-
學習Java的時候可以選擇高版本的JDK,但是必須是LTS版本,例如Java17
-
去公司開發Java項目的時候,公司已有的項目用什麼JDK版本,那麼你就優先使用什麼JDK版本,公司從0開始開發項目,那麼優先選擇穩定而且是官方長期支持的版本,例如Java8或者Java17,目前國內大部分的互聯網公司現有的Java項目依然使用Java8,未來(2-3年以後)會逐步升級到Java17,一些開源框架依賴的JDK也從Java8已經升級到Java17,例如Spring Framework,Spring Boot等等。
2. Windows版Java8開發環境搭建
2.1 Windows版Java8下載
- 訪問Java的官網,其訪問地址是https://www.oracle.com/java/
- 點擊右下角的Download Java,跳轉到Java的下載頁面
Java的下載地址是https://www.oracle.com/java/technologies/downloads/
目前(2023/07/12)Oracle官方提供的最新Java版本(JDK版本)是Java20和Java17,但是最新的LTS版本是Java17
本次我們下載的是Java8,所以往下滾動鼠標到Java8的下載
目前Java8支持四個操作系統
-
Linux
-
macOS
-
Solaris
-
Windows
大家在下載Java8的時候需要根據自己所使用操作系統的版本選擇對應版本的Java8
- 選擇Windows版 Java8 x64 Installer
Q:如何知道使用Windows版本
A:在設置(Windows+i)->系統->系統信息->Windows規格查看系統版本信息
由於使用的操作系統是Windows11 2022 H2 ,因此選擇Windows x64 Installer 的jdk-8u371-windows-x64.exe
x86 Installer 表示32位Java8安裝程序
x64 Installer 表示64位Java8安裝程序
選擇32位還是64位是根據系統類型來決定的,強制要求開發者全部使用64位系統,因爲32位系統只能使用4G內存,現在做軟件開發4G內存肯定是不夠用的。
4.下載Windows版 Java8 x64 Installer
5.註冊、登錄Oracle賬戶
如果沒有Oracle賬戶,大家可以在註冊頁面填寫相應的信息註冊Oracle賬戶
賬戶創建成功以後,在登錄頁面填寫賬戶信息登錄Oracle賬戶
登錄成功之後瀏覽器會自動下載Java8
當Java8下載完成後 默認在下載目錄(C:\Users\liuguanglei\Downloads)下會看到Java8的安裝包jdk-8u371-windows-x64.exe
2.2 Windows版Java8安裝
2.2.1 Windows版Java8安裝過程
- 雙擊Windows版Java8的安裝包jdk-8u371-windows-x64.exe啓動安裝器
在彈出的目前無法訪問 SmartScreen點擊運行即可
在彈出的**用戶賬戶控制,你要允許此應用對你的設備進行更改嗎?**選擇是即可
- 下一步
- 定製安裝
安裝組件默認情況下包含了開發工具、源代碼和公共JRE
安裝路徑默認情況下是 C:\Program Files\Java\jdk-1.8
由於JDK中包含了JRE,因此無需再安裝公共JRE
因此選擇公共JRE,設置成此功能將不可用
只需要安裝開發工具和源代碼即可
- 點擊下一步
開始安裝
稍等片刻即可安裝完成
- 安裝成功
安裝完成後可以點擊 後續步驟 和 關閉
- 後續步驟:跳轉到Java8的官方文檔
- 關閉:關閉安裝嚮導,完成Java8安裝
2.2.2 Windows版Java8安裝目錄
Windows版Java8安裝目錄是C:\Program Files\Java\jdk-1.8
由於JDK包含了JRE,因此Java8目錄中有個jre目錄
作爲Java初學者來說,目前只需要關注bin目錄和src.zip壓縮文件
- bin目錄:存放Java提供的開發工具,例如javac,java,javap
- src.zip:存放Java源代碼文件(.java結尾的文件)
例如String.java
2.3 Windows版Java8配置
2.3.1 Java8配置JAVA_HOME環境變量
2.3.1.1 爲什麼Java8要配置JAVA_HOME環境變量
JAVA_HOME表示Java的安裝路徑,例如C:\Program Files\Java\jdk-1.8
後期我們會使用到Java開發的一些工具,例如Tomcat、Maven、JMeter等等,這些工具都會依賴JAVA_HOME環境變量。如果你不配置就無法正常使用,而且這些工具會提示你配置JAVA_HOME環境變量。
例如在終端位於Maven的bin目錄下執行 mvn --version命令查看Maven版本信息時會提示需要配置JAVA_HOME環境變量
而只有配置JAVA_HOME環境變量以後,mvn --version會輸出maven版本信息以及依賴的Java信息
2.3.1.2 Java8配置JAVA_HOME環境變量
- 打開系統屬性面板
依次打開設置(Windows+i)>系統->系統信息>高級系統設置
然後會彈出系統屬性面板
- 點擊系統屬性面板的環境變量
環境變量分爲用戶變量和系統變量,二者的區別是作用範圍不同
用戶變量只針對當前用戶有效,系統變量針對所有用戶都有效
建議使用系統變量
- 配置Java8的JAVA_HOME環境變量
點擊系統變量的新建(W),然後輸入變量名和變量值
變量名:JAVA_HOME
變量值:C:\Program Files\Java\jdk-1.8
- 依次點擊三個確定,關閉系統屬性面板,完成Java8的JAVA_HOME環境變量配置
- 驗證Java8的JAVA_HOME環境變量配置是否成功
驗證的方法就是啓動一個終端,然後在終端輸入echo %JAVA_HOME%,如果能夠輸出Java的安裝路徑表示配置成功
Q:如何啓動終端
A:按Windows+R打開運行窗口
然後輸入cmd後回車
就可以打開終端
驗證JAVA_HOME環境變量是否配置成功
2.3.2 Java8配置Path環境變量
2.3.2.1 Path環境變量是什麼?
Path環境變量的變量名是Path,變量值就是一系列路徑,例如%SystemRoot%,%SystemRoot%\system32等等。
其中%SystemRoot%表示Windows系統根路徑 C:\Windows
可以在終端上輸入echo %SystemRoot%命令查看
Path環境變量的作用就是當我們在終端上輸入命令回車後,系統會從當前路徑和Path環境變量指定的路徑查找命令對應的可執行程序,然後執行程序。
當我們在終端上輸入notepad命令回車後
系統會打開notepad對應的記事本程序
notepad命令對應的記事本程序路徑是C:\Windows\notepad.exe
但是如果我們輸入一個不存在的命令(例如notepadxxx),那麼系統無法運行該命令對應的可執行程序,然後會提示 不是內部或外部命令,也不是可運行的程序或批處理文件。
2.3.2.2 Path環境變量的使用
需求:實現在終端的任意路徑下輸入QQ就可以啓動QQ
- 找到QQ安裝目錄的bin目錄 先右鍵點擊位於桌面的QQ快捷方式,然後選擇屬性
然後在屬性面板中點擊打開文件所在的位置(F)
打開QQ安裝目錄的bin目錄(C:\Program Files (x86)\Tencent\QQ\Bin)
- 打開系統屬性面板
依次打開設置(Windows+i)>系統->系統信息>高級系統設置
然後會彈出系統屬性面板
- 點擊系統屬性面板的環境變量
- 配置QQ的Path環境變量
首先點擊系統變量的Path,然後再點擊編輯
然後將QQ的bin目錄(C:\Program Files (x86)\Tencent\QQ\Bin)添加到Path環境變量中
- 點擊三次確定關閉系統屬性面板,完成QQ的Path環境變量配置
- 驗證QQ的Path環境變量是否配置成功
首先重新開啓一個終端,然後在終端的任意路徑輸入QQ看其是否能夠啓動成功,如果能夠啓動則表示QQ的Path環境變量配置成功
2.3.2.3 爲什麼Java8要配置Path環境變量
假設不配置Java8的Path環境變量,在終端上使用javac和java的時候,系統會提示 不是內部或外部命令,也不是可運行的程序或批處理文件。
因爲Java8提供的開發工具(javac,java)需要在終端上使用,如果你雙擊運行javac和java,它們就會啓動終端運行然後直接閃退。
爲了在終端的任意路徑下使用javac和java,因此我們需要將Java8安裝目錄的bin目錄添加到Path環境變量中
-
javac 用於編譯java源文件(.java結尾的文件),編譯成功之後會生成字節碼文件(.class結尾的文件)
-
java 用於解釋執行字節碼文件,運行Java程序
2.3.2.4 Java8配置Path環境變量
- 打開系統屬性面板
右鍵點擊開始菜單,搜索環境變量,然後選擇編輯系統環境變量
然後會彈出系統屬性面板
- 點擊系統屬性面板的環境變量
環境變量分爲用戶變量和系統變量,二者的區別是作用範圍不同
用戶變量只針對當前用戶有效,系統變量針對所有用戶都有效
建議使用系統變量
- 配置Java8的PATH環境變量
首先點擊系統變量的Path環境變量,再點擊編輯
然後將Java8安裝目錄的bin目錄(C:\Program Files\Java\jdk-1.8\bin)添加到Path環境變量中,
並且置頂
- 依次點擊三次確定,關閉系統屬性面板,完成Java8的Path環境變量配置
- 驗證Java8的Path環境變量是否配置成功
驗證Java8的Path環境變量是否配置成功的方法就是重新開啓一個終端,然後在終端的任意路徑輸入javac -version和java -version並回車,然後查看終端是否能夠輸出java編譯器版本信息和java解釋器版本信息
2.3.2.5 Java8使用JAVA_HOME配置Path環境變量
Q:爲什麼Java8要使用JAVA_HOME配置Path環境變量
A:切換JDK版本時只需要修改JAVA_HOME環境變量的值即可
- 打開系統屬性面板
右鍵點擊開始菜單,搜索環境變量,然後選擇編輯系統環境變量
然後會彈出系統屬性面板
- 點擊系統屬性面板的環境變量
- 使用JAVA_HOME配置Java8的Path環境變量
首先點擊系統變量的Path,然後點擊編輯
然後將Java8的Path環境變量C:\Program Files\Java\jdk-1.8\bin改成%JAVA_HOME%\bin
- 依次點擊三次確定,關閉系統屬性面板,完成Java8使用JAVA_HOME配置Path環境變量
- 驗證Java8的Path環境變量配置是否成功
驗證Java8的Path環境變量是否配置成功的方法就是重新開啓一個終端,然後在終端的任意路徑輸入javac -version和java -version並回車,然後查看終端是否能夠輸出java編譯器版本信息和java解釋器版本信息
2.4 Windows版Java8卸載
Q:什麼時候需要卸載Java8
A:如果不再使用(例如公司項目全部使用Java17開發)Java8時就可以將其卸載
Windows版Java8的卸載需要刪除Java8相關環境變量(Path環境變量、JAVA_HOME環境變量)以及Java8程序
2.4.1 刪除Java8 Path環境變量
1.打開系統屬性面板
右鍵點擊開始菜單,搜索環境變量,然後選擇編輯系統環境變量
然後會彈出系統屬性面板
- 點擊系統屬性面板的環境變量
- 刪除Java8的Path環境變量
首先選擇系統變量的Path,然後點擊編輯
然後選擇Java8的Path環境變量%JAVA_HOME%\bin,點擊刪除即可
- 依次點擊三次確定關閉系統屬性面板,完成Java8的Path環境變量刪除
- 驗證Java8的Path環境變量是否刪除成功
重新開啓一個新的終端,在終端的任意路徑下輸入javac -version和java -version,如果系統提示javac和java不是內部或外部命令,也不是可運行的程序或批處理文件則表示刪除成功
2.4.2 刪除Java8 JAVA_HOME環境變量
1.打開系統屬性面板
右鍵點擊開始菜單,搜索環境變量,然後選擇編輯系統環境變量
然後會彈出系統屬性面板
- 點擊系統屬性面板的環境變量
3.刪除Java8的JAVA_HOME環境變量
選擇系統變量的JAVA_HOME,點擊刪除
- 依次點擊兩次確定關閉系統屬性面板完成Java8 JAVA_HOME環境變量的刪除
- 驗證Java8 JAVA_HOME環境變量是否刪除成功
重新開啓一個終端,然後在終端上輸入echo %JAVA_HOME% 回車後如果不能輸出Java8的安裝路徑,而是輸出%JAVA_HOME%那麼表示Java8 JAVA_HOME環境變量刪除成功
2.4.3 卸載Java8程序
- 打開安裝的應用
右鍵點擊開始菜單,然後左鍵選擇安裝的應用
此時可以查看安裝的應用
- 在安裝的應用中搜索Java
- 選擇Java8,點擊卸載
確認卸載
然後在彈出的用戶賬戶控制,你要允許此應用對你的設備進行更改嗎? 選擇是即可
接下來就會開始卸載,此過程大概幾秒鐘
卸載成功後在安裝的應用中找不到Java8
2.5 Java8收費怎麼辦?
Oracle Java archive歸檔了所有Java版本
在2019年以後Java8後續更新的版本就開始收費,但是主要針對的是企業用戶,對於個人學習沒有任何影響。
Java SE 8 (8u202 and earlier)在生產環境是可以免費使用
Java SE 8 (8u211 and later)在生產環境是需要付費使用
由於Java虛擬機規範是開放的,任何企業或者是個人都可以實現它
我們常用的Oracle JDK只是Oralce公司的一種具體實現,其他企業和個人可以根據規範自己開發JDK。
常見的JDK有如下幾種
-
Oracle JDK
-
Open JDK
-
國外的IBM、Amazon、SAP、Eclipse、Azul以及國內的阿里、騰訊、華爲都有自己的JDK
即使Oracle公司的Java8在生產環境收費,我們也可以選擇其他公司免費版本的Java8,例如Amazon Corretto、Azul Zulu等等。
3. Windows版Java17開發環境搭建
3.1 Windows版Java17下載
- 訪問Java的官網,其訪問地址是https://www.oracle.com/java/
- 點擊右上角的Download Java,跳轉到Java的下載頁面
Java的下載地址是 https://www.oracle.com/java/technologies/downloads/
目前Oracle官方提供的最新Java版本是Java20和Java17,但是最新的LTS版本是Java17,因此點擊下載頁面的Java17切換到Java17
根據 Oracle 免費條款和條件,JDK 17 二進制文件可以在生產環境中免費使用,並且可以免費重新分發。
目前Java17支持三個系統
-
Linux
-
macOS
-
Windows
大家在下載Java17的時候需要根據自己所使用操作系統的版本選擇對應版本的Java17
- 選擇Windows版 x64 Installer Java17
Q:如何知道使用Windows版本
A:在設置(Windows+i)->系統->系統信息->Windows規格查看系統版本信息
由於使用的操作系統是Windows11 2022 H2 ,因此選擇Windows x64 Installer 的jdk-17_windows-x64_bin.exe
- 下載Windows版 JDK17 x64 Installer
當點擊 https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe 下載連接後瀏覽器會自動開始下載Windows版 JDK17 x64 Installer
和Java8相比下載時不需要同意許可協議,也不需要註冊和登錄Oracle賬號,因此下載Java17比下載Java8更加方便。
當Java17下載完成後 默認在下載目錄(C:\Users\liuguanglei\Downloads)下會看到Java17的安裝包jdk-17_windows-x64_bin.exe
3.2 Windows版Java17安裝
3.2.1 Windows版Java17安裝過程
- 雙擊Windows版Java17的安裝包jdk-17_windows-x64_bin.exe啓動安裝程序
在彈出的目前無法訪問 SmartScreen點擊運行即可
在彈出的用戶賬戶控制,你要允許此應用對你的設備進行更改嗎?選擇是即可啓動安裝程序
- 點擊下一步
- 選擇目標文件夾
默認安裝路徑是C:\Program Files\Java\jdk-17
如果想要更改到其他目錄,點擊更改即可,但是注意目錄不要包含中文字符和中文空格
- 點擊下一步
進行安裝中,安裝過程需要幾秒鐘
- 安裝完成
Java17安裝完成後點擊後續步驟和完成
- 後續步驟:跳轉到Java17官方文檔
- 關閉:關閉Java17安裝嚮導,完成Java17安裝
3.2.2 Windows版Java17安裝目錄
Windows版Java17默認的安裝路徑是C:\Program Files\Java\jdk-17
Java17安裝目錄說明
目錄 | 說明 |
---|---|
bin | 該目錄下主要存放JDK的各種工具,例如javac,java等等 |
conf | 該目錄下主要存放JDK的相關配置文件 |
include | 該目錄下主要存放一些平臺(操作系統)特定的頭文件 |
jmods | 該目錄下主要存放JDK的各種模塊 |
legal | 該目錄下主要存放JDK各種模塊的授權文檔 |
lib | 該目錄下主要存放JDK的一些補充jar包以及Java源碼(src.zip) |
作爲Java初學者來說,目前只需要關注bin目錄和lib目錄
- bin目錄
- lib目錄
3.3 Windows版Java17配置
3.3.1 Java17配置JAVA_HOME環境變量
3.3.1.1 爲什麼Java17要配置JAVA_HOME環境變量
JAVA_HOME表示Java的安裝路徑,例如C:\Program Files\Java\jdk-17
後期我們會使用到Java開發的一些工具,例如Tomcat、Maven、JMeter等等,這些工具都會依賴JAVA_HOME環境變量。如果你不配置就無法正常使用,而且這些工具會提示你配置JAVA_HOME環境變量。
例如在終端位於Tomcat的bin目錄下執行 startup.bat腳本啓動Tomcat時會提示需要配置JAVA_HOME環境變量
而只有配置JAVA_HOME環境變量以後,在終端位於Tomcat的bin目錄下執行 startup.bat腳本才能正常啓動Tomcat
啓動成功之後在瀏覽器地址欄輸入127.0.0.1:8080可以訪問Tomcat首頁
不過啓動之前需要將位於Tomcat配置文件目錄(D:\soft\apache-tomcat-10.1.9\conf)的Tomcat日誌配置文件logging.properties
關於控制檯編碼由默認的UTF-8改成GBK,否則終端啓動會亂碼
java.util.logging.ConsoleHandler.encoding = GBK
3.3.1.2 Java17配置JAVA_HOME環境變量
- 打開系統屬性面板
依次打開設置(Windows+i)>系統->系統信息>高級系統設置
然後會彈出系統屬性面板
- 點擊系統屬性面板的環境變量
環境變量分爲用戶變量和系統變量,二者的區別是作用範圍不同
用戶變量只針對當前用戶有效,系統變量針對所有用戶都有效
Windows電腦通常只有一個人使用,不太可能有多個用戶,因此建議使用系統變量
- 配置Java17的JAVA_HOME環境變量
點擊系統變量的新建(W),然後輸入變量名和變量值
變量名:JAVA_HOME
變量值:C:\Program Files\Java\jdk-17
- 依次點擊三個確定,關閉系統屬性面板,完成Java8的JAVA_HOME環境變量配置
- 驗證Java17的JAVA_HOME環境變量配置是否成功
驗證的方法就是啓動一個終端,然後在終端輸入echo %JAVA_HOME%,如果能夠輸出Java的安裝路徑表示配置成功
Q:如何啓動終端
A:在文件資源管理器(Windows+E)的地址欄輸入cmd回車後
就可以打開終端
驗證JAVA_HOME環境變量是否配置成功
3.3.2 Java17配置Path環境變量
3.3.2.1 Java17自動配置Path環境變量
在安裝Java17以後,Java17會自動配置Path環境變量
不過配置的路徑是C:\Program Files\Common Files\Oracle\Java\javapath,該路徑下只有javac、java、javaw和jshell四個工具
這樣也就意味着可以在終端的任意路徑下使用javac和java
但是無法在終端的任意路徑下使用其他的工具,例如jconsole、jps、jstack等等,因此建議手動配置Java17的Path環境變量。
3.3.2.2 Java17手動配置Path環境變量
- 打開系統屬性面板
右鍵點擊開始菜單,搜索環境變量,然後選擇編輯系統環境變量
然後會彈出系統屬性面板
- 點擊系統屬性面板的環境變量
- 配置Java17的PATH環境變量
首先點擊系統變量的Path環境變量,再點擊編輯
將Java17安裝目錄的bin目錄(C:\Program Files\Java\jdk-17\bin)添加到Path環境變量中
並且置頂
置頂成功
然後將Java17自動配置的Path環境變量刪除
- 依次點擊三次確定,關閉系統屬性面板,完成Java17的Path環境變量配置
- 驗證Java17的Path環境變量是否配置成功
驗證Java17的Path環境變量是否配置成功的方法就是重新開啓一個終端,然後在終端的任意路徑輸入javac -version和java -version並回車,然後查看終端是否能夠輸出java編譯器版本信息和java解釋器版本信息
3.3.2.3 Java17使用JAVA_HOME配置Path環境變量
Q:爲什麼Java17要使用JAVA_HOME配置Path環境變量
A:切換JDK版本時只需要修改JAVA_HOME環境變量的值即可
- 打開系統屬性面板
右鍵點擊開始菜單,搜索環境變量,然後選擇編輯系統環境變量
然後會彈出系統屬性面板
- 點擊系統屬性面板的環境變量
- 配置Java17的PATH環境變量
首先點擊系統變量的Path環境變量,再點擊編輯
將Java17的Path環境變量由C:\Program Files\Java\jdk-17\bin
改成%JAVA_HOME%\bin
- 依次點擊三次確定,關閉系統屬性面板,完成Java17使用JAVA_HOME配置Path環境變量
- 驗證Java17的Path環境變量配置是否成功
驗證Java17的Path環境變量是否配置成功的方法就是重新開啓一個終端,然後在終端的任意路徑輸入javac -version和java -version並回車,然後查看終端是否能夠輸出java編譯器版本信息和java解釋器版本信息
3.4 Windows版Java17卸載
3.4.1 Windows版Java17卸載說明
Q:什麼時候需要卸載Java17
A:如果不再使用(例如在未來的某天公司項目全部使用Java21開發)Java17時就可以將其卸載
Windows版Java17的卸載需要刪除Java17相關環境變量(Path環境變量、JAVA_HOME環境變量)以及Java17程序
3.4.2 刪除Java17 Path環境變量
- 打開系統屬性面板
右鍵點擊開始菜單,搜索環境變量,然後選擇編輯系統環境變量
然後會彈出系統屬性面板
- 點擊系統屬性面板的環境變量
- 刪除Java17的Path環境變量
首先選擇系統變量的Path,然後點擊編輯
然後選擇Java17的Path環境變量%JAVA_HOME%\bin,點擊刪除即可
- 依次點擊三次確定關閉系統屬性面板,完成Java17的Path環境變量刪除
- 驗證Java17的Path環境變量是否刪除成功
重新開啓一個新的終端,在終端的任意路徑下輸入javac -version和java -version,如果系統提示javac和java不是內部或外部命令,也不是可運行的程序或批處理文件則表示刪除成功
3.4.3 刪除Java17 JAVA_HOME環境變量
- 打開系統屬性面板
右鍵點擊開始菜單,搜索環境變量,然後選擇編輯系統環境變量
然後會彈出系統屬性面板
- 點擊系統屬性面板的環境變量
- 刪除Java17的JAVA_HOME環境變量
選擇系統變量的JAVA_HOME,點擊刪除
- 依次點擊兩次確定關閉系統屬性面板完成Java8 JAVA_HOME環境變量的刪除
- 驗證Java17 JAVA_HOME環境變量是否刪除成功
重新開啓一個終端,然後在終端上輸入echo %JAVA_HOME% 回車後如果不能輸出Java17的安裝路徑,而是輸出%JAVA_HOME%那麼表示Java17 JAVA_HOME環境變量刪除成功
3.4.3 卸載Java17程序
- 打開安裝的應用
右鍵點擊開始菜單,然後左鍵選擇安裝的應用
此時可以查看安裝的應用
- 在安裝的應用中搜索Java
- 選擇Java17,點擊卸載
確認卸載
然後在彈出的用戶賬戶控制,你要允許此應用對你的設備進行更改嗎? 選擇是即可
接下來就會開始卸載,此過程大概幾秒鐘
卸載成功後在安裝的應用中找不到Java17
3.5 Windows版Java17和Java8相互切換
3.5.1 如何實現Java17和Java8相互切換
由於開發項目時使用Java8,但是學習JDK新特性時安裝了Java17,因此此時機器上同時存在兩個不同版本的JDK
那麼如何在這兩個版本中間切換?
首先需要知道當前使用的Java版本
在終端的任意路徑通過javac -version和java -version得知目前使用的是Java17
Q:爲什麼Java版本是Java17?
A:因爲JAVA_HOME環境變量的值是Java17的安裝路徑,而JDK的Path環境變量引用了JAVA_HOME環境變量
那麼想要實現Java8和Java17相互切換,只需要修改JAVA_HOME環境變量值即可
3.5.2 Windows版Java17切換到Java8
想要從Java17切換到Java8,只需要將JAVA_HOME環境變量的變量值修改成Java8的安裝路徑
然後重新開啓一個終端,在終端的任意路徑上輸入javac -version和java -version,查看輸出的版本信息是否爲Java8即可
3.5.3 Windows版Java8切換到Java17
從Java8再次切換到Java17,只需要將JAVA_HOME環境變量的變量值改成Java17的安裝路徑
然後重新開啓一個終端,在終端的任意路徑上輸入javac -version和java -version,查看輸出的版本信息是否爲Java17即可
4. Windows版第一個Java程序開發
4.1 Java程序的開發流程
-
編寫:使用Java開發工具編寫源文件,源文件以.java結尾,用於存儲Java代碼
-
編譯:使用javac把源文件編譯生成字節碼文件,字節碼文件以.class結尾,字節碼文件名和類名相同,字節碼文件的數量和源文件中class的數量相同,編譯的格式是javac 源文件名.java,例如javac HelloWorld.java
-
運行:使用java解釋運行編譯生成後的字節碼文件,運行的格式是java 字節碼文件名(不需要.class後綴),例如java HelloWorld
Q:如何看待Java是一門半編譯半解釋型的語言?
A:半編譯半解釋指的是JVM在解釋執行既有解釋器解釋執行,又有JIT編譯器編譯執行
4.2 Java開發工具介紹
雖然JDK提供了開發Java程序時所用到的一些工具,例如javac,java,jdb,jconsole等等
但是JDK並沒有提供編寫Java代碼的開發工具,因此想要在編寫Java程序之前,還需要了解Java開發工具, 我這裏把Java開發工具分成兩類,分別是文本編輯器和IDE
-
文本編輯器
Visual Studio Code和Sublime Text都是高級的文本編輯器,而且是跨平臺的(Windows,macOS,Linux),建議初學Java的朋友可以使用它們來開發Java程序,因爲相比IDE而言更加輕量級,對初學者更加容易上手。
-
IDE(Integrated Development Environment)
IDEA和Eclipse都是IDE,IDE集成項目開發中常用的功能,包括編輯器、編譯工具、反編譯工具、測試工具、性能分析工具、部署工具等等,因此可以大大提高開發效率。
目前大部分互聯網公司基本普遍都會使用IntelliJ IDEA開發Java項目,因此我們後期會全程使用IntelliJ IDEA。
如果你還在上大學而且剛好學的計算機專業,那麼大概率你的Java老師教你使用的Eclipse。
4.3 第一個Java程序開發
在學習任何一門編程語言時編寫的第一個程序通常都稱爲HelloWorld
如果你能夠編寫並且運行HelloWorld,那麼意味着已經邁入編程的大門
本次我們使用比較原始的開發方式:也就是基於記事本+Windows終端+JDK提供的開發工具(javac和java)來開發人生第一個Java程序,這種方式雖然和使用IDE開發相比效率比較低,但是能夠讓初學者更加直觀地理解Java程序的開發和運行流程。
- 新建code文件夾
在D盤目錄下,鼠標右鍵新建>文件夾
將文件夾的名稱改爲code,用於存放Java源文件
- 顯示文件後綴名
默認情況下Windows是隱藏已知文件擴展名
建議在新建源文件之前勾選文件擴展名,這樣才能顯示文件擴展名
- 新建Java源文件
在code文件夾下 右鍵新建>文本文檔
將默認的文件名新建 文本文檔.txt 重命名爲HelloWorld.java
選中新建 文本文檔.txt,然後右鍵,選擇重命名
重命名時系統會提示如果改變文件擴展名,可能導致文件不可以,確實要更改嗎?,點擊是即可
這樣 HelloWorld.java源文件創建成功
- 編輯源文件
選中HelloWorld.java,右鍵選擇 打開方式>選擇其他應用
然後選擇使用記事本打開
HelloWorld.java源文件打開後就可以開始編寫Java代碼
然後在HelloWorld.java源文件中編寫HelloWorld
public class HelloWorld{
public static void main(String[]args){
System.out.println("Hello World");
}
}
在使用記事本編寫Java代碼時
-
如果覺得代碼字體太小,可以按住Ctrl鍵,然後向上滾動鼠標放大字體
-
代碼需要進行適當的縮進
-
代碼中遇到了符號,比如說圓括號(()),方括號([]),大括號({})都需要成對編寫,然後再往裏面編寫內容,而且這些符號都是英文的,因爲Java是美國人發明的,不支持中文。
編寫完成後按Ctrl+s保存
- 編譯源文件
首先需要開啓Windows終端,因爲javac和java只能在Windows終端上使用。
這裏建議直接在文件資源管理器的地址欄輸入cmd後回車開啓終端
由於文件資源管理器的地址欄位於D:\code,因此開啓終端後會自動切換到D:\code
然後輸入javac HelloWorld.java並回車 編譯源文件
如果沒有語法錯誤編譯成功之後會生成HelloWorld.class文件
- 解釋運行字節碼文件
在終端上輸入java HelloWorld後回車解釋執行HelloWorld.class字節碼文件
如果沒有任何運行時錯誤就會看到Windows終端打印輸出HelloWorld並換行
4.4 第一個Java程序詳解
public class HelloWorld{
public static void main(String[]args){
System.out.println("Hello World");
}
}
-
public是一個關鍵字,表示權限最大的訪問權限修飾符,稱爲公共的,後期在學習面向對象的時候還會學習private,默認的,protected,這裏只需要記住如果類名使用public 修飾,那麼public修飾的類名必須和文件名保持一致。
-
class是一個關鍵字,用於定義類,例如class Welcome{} 表示定義一個類,類名是Welcome,{}表示類的開始範圍和結束範圍,Java是面向對象的編程語言,類是Java程序的基本單元。
-
在一個源文件中可以定義多個class,但是隻能有一個類被public修飾。編譯器在編譯後會生成和源文件中class數量一致的字節碼文件,字節碼文件名和類名相同。
public class World{
public static void main(String[] args){
System.out.println(“HelloWorld”);
}
}class Chinese{
}
class American{
}
編譯和運行World.java程序後會生成3個字節碼文件,分別是World.class、Chinese.class和American.class,因爲World.java中定義了3個類。
-
public static void main(String[] args){} 格式是固定的,表示main方法,main方法是Java程序的入口,Java程序是從main方法的第一行開始執行的,該方法被JVM調用,如果你的Java程序想要獨立運行,那麼必須要固定格式的main方法
-
System.out.println(“HelloWorld”); 的作用就是在終端上打印輸出字符串HelloWorld 然後換行,如果想輸出其他內容只需要替換"HelloWorld"即可,;表示語句的結束**,Java中的每條語句都需要使用;結束,否則編譯錯誤**。例如System.out.println();就是一條打印語句。如果打印輸出後不換行可以使用System.out.print();語句
public class PrintData{
public static void main(String[]args){ System.out.println("HelloWorld"); System.out.print("跟光磊學Java"); System.out.print("從小白"); System.out.print("到架構師"); }
}
編譯和運行PrintData.java程序
由於程序中打印的內容包含了中文,但是源文件編碼使用UTF-8,而Windows終端默認使用GBK編碼, -encoding UTF-8表示使用UTF-8編碼編譯源文件,這樣可以程序輸出結果出現避免亂碼問題。
4.5 第一個Java程序常見問題
4.5.1 編譯時錯誤和運行時錯誤
初學者在開發第一個Java程序時可能會遇到各種各樣的錯誤,這些錯誤可以分成兩類:編譯時錯誤和運行時錯誤。
因爲Java程序是先編譯,再解釋運行的,因此先出現編譯錯誤,然後再出現解釋錯誤。
即使程序編譯通過(語法沒有問題),也不一定表示你的程序完全沒有問題,因爲可能還有運行時錯誤。
-
編譯時錯誤就是使用javac編譯Java源文件遇到的語法錯誤,除此以外還有找不到源文件的問題
-
運行時錯誤就是使用java解釋執行字節碼文件遇到的錯誤和異常
在排查運行時錯誤的時候如果你修改了源文件的代碼,那麼一定要重新編譯,否則你修改的內容不會生效
在遇到錯誤後也不要慌,Java會告訴你錯在哪裏,大家如果解決不了還可以利用網絡搜索答案,因爲你們遇到的大部分錯誤在之前別人可能也遇到過。
4.5.2 Java入門程序常見錯誤和解決方案
4.5.2.1 編譯時錯誤:找不到文件
第一種情況:源文件路徑不正確
HelloWorld.java源文件在D:\code目錄下
但是啓動終端後默認在C:\Users\liuguanglei目錄下,如果使用javac編譯HelloWorld.java就會出現找不到文件的錯誤
解決辦法就是在Windows終端下切換到D:\code目錄下再使用javac HelloWorld.java編譯源文件
-
切換盤符:輸入盤符:(例如D:)然後回車即可
-
切換路徑:使用cd 路徑然後回車即可,cd只能在盤符內切換
第二種情況:源文件文件名不正確
解決方案就是將原文件名改正確即可
4.5.2.2 編譯時錯誤:找不到符號問題
錯誤程序案例
public class HelloWorld{
public static void main(string[]args){
System.out.println("Hello World");
}
}
解決方案:將string改成String,因爲Java語法規定嚴格區分大小寫,string和String表示完全不同的含義。
4.5.2.3 編譯時錯誤:編碼GBK不可映射字符
錯誤程序案例
public class HelloWorld{
public static void main(String[]args){
System.out.println("Hello World");
}
}
解決方案:將中文的分號;替換成英文的分號;即可,因爲Java不識別中文分號
大家需要注意的是Java代碼中各種符號必須是英文,例如{},(),[],;都是英文的
4.5.2.4 編譯時錯誤:亂碼問題
錯誤程序案例
public class HelloWorld{
public static void main(String[]args){
System.out.println("跟光磊學Java從小白到架構師");
}
}
亂碼的原因就是編碼和解碼的不是同一個編碼
Java源文件的默認編碼是UTF-8
而Windows終端或者稱爲命令提示符的編碼是GB2312
在Windows終端中可以使用chcp查看終端編碼,如果輸出結果是936則表示GB2312編碼,GB2312是一種雙字節編碼用於表示簡體中文字符。
這兩個編碼不一致導致的亂碼
解決方案1:將文件另存爲的時候設置編碼爲ANSI
文件>另存爲
設置文件編碼爲ANSI,點擊保存
確認另存爲HelloWorld時會提示 **HelloWorld.java已經存在。要替換它嗎?**點擊是即可
此時文件編碼從UTF-8改成ANSI,ANSI在中文環境下就是中文編碼
然後再編譯運行HelloWorld
解決方案2:在編譯時指定文件編碼
javac -encoding UTF-8 HelloWorld.java
4.5.2.5 運行時錯誤:找不到或者無法加載主類
主類表示有main方法的類,找不到或者無法加載主類的原因就是當前路徑下沒有指定的字節碼文件
解決方案:先編譯生成字節碼文件,再運行程序
4.5.2.6 運行時錯誤:找不到main方法的問題
錯誤程序案例
public class HelloWorld{
public static void mian(String[]args){
System.out.println("跟光磊學Java從小白到架構師");
}
}
解決方案:將mian改成main即可,Java程序想要獨立運行必須包含固定格式的main方法