Java架構師成長之道之Java概述與開發環境搭建
1.1 Java概述
1.1.1 Java發展簡史

-
起源
1991年,Sun公司的James Golsing領導的工程師小組想要開發一種用於像有線電視機頂盒這樣的消費類電子產品的小型計算機語言,該產品的特點是由於不同的廠商選擇不同的CPU和操作系統,因此要求該語言不能和特定的體系結構綁定在一起,也就是跨平台的。最初將這個語言命名為Oak,然后發現已經有一種語言叫這個名字了,然后改為Java。 -
流行
20世紀90年代末,Java趕上了互聯網發展的潮流,而互聯網的特點剛好和消費類嵌入式電子產品類似(不同計算機產商選擇不同的CPU和操作系統),得益於Java的跨平台特性,可以制作在支持Java的Web瀏覽器內的程序(Applet)而逐漸流行起來。 -
生態
由於Java開源,也得到了許多大廠(例如Oracle,IBM,阿里巴巴,谷歌,蘋果)的支持,逐步發展成為具有開源、跨平台、高性能、支持多線程、分布式、安全可靠等諸多特性的開發平台和運行平台,而且自JDK1.4以后逐漸涌現出許多為了簡化企業級開發的開源框架,例如后期會學習的Spring Framework,MyBatis,Netty,Dubbo等等都是使用Java實現,開發者可以通過閱讀Java和框架的源碼來提高自身的編程功力。 -
開發平台
經過20多年(1995年正式對外公開發布)的發展已經逐步建立起自己強大的生態體系,在大型互聯網應用開發,移動端Android開發以及大數據開發占據了廣闊的市場,最典型的就是國內互聯網巨頭-阿里巴巴在其電商、物流、金融、支付、大數據、雲計算等業務場景中大量使用了Java及其相關技術棧(Spring Framework/Spring Boot/Spring Cloud,Hadoop,Spark,Flink/Android)。 -
運行平台
Java程序是運行在JVM之上的,這就是Java程序跨平台實現的本質原因,而且由於Java的開放性,有越來越多的語言是運行在JVM之上的,例如大數據處理語言Scala,Android開發的Kotlin以及Clojure,Groovy等等。
1.1.2 Java技術體系平台
Java自從1998年之后將Java分為三個版本,分別是JavaSE,JavaEE和JavaME,不同的版本有不同的應用場景。
-
JavaSE(Java Standard Edition):標准版Java,提供了完整的Java核心API,主要用於桌面應用開發。
-
JavaEE(Java Enterprise Edition):企業式Java,主要用於企業級后台服務,分布式應用開發
-
JavaME(Java Micro Edition):嵌入式Java,主要用於開發嵌入式設備的產品,例如塞班手機游戲
由於目前Java主要的擅長領域是企業級后台服務開發、Android移動應用開發以及大數據應用開發,而Java語言是它們的基石語言,因此無論是從事企業級后台服務開發,還是Android以及大數據應用開發,都要先從JavaSE上手。
1.1.3 Java基礎核心技術棧
如下列表所示,展示了JavaSE階段的核心技術棧,涵蓋了Java語言、類庫以及常用第三方開源類庫、框架的實現。
-
Java語言基礎
- Java概述與開發環境搭建
- Java數據存儲
- Java數據運算
- Java程序流程控制
- Java數組
- Java面向對象程序設計(上)
- Java面向對象程序設計(下)
- Java開發常用API
-
Java語言高級
- 集合
- 泛型
- 異常處理
- 數據庫編程
- 注解
- IO/NIO/AIO
- AIO網絡框架tio設計與實現
- 多線程
- 網絡編程
- 反射和動態代理
- 日志
- XML
- 正則表達式
- Java語言新特性實戰
-
Java語言進階
- 數據結構
- 算法
- 設計模式
- Apache Commons組件使用
- RxJava
- Google Guava
- JVM
- Netty實戰與源碼分析
- Java程序性能優化
-
JavaSE項目
- Java實現 HTTP Server
- Java實現ORM Framework
- Java實現 RPC Framework
1.2 Java開發環境搭建
1.2.1 Java開發環境概述
Java開發環境主要是在Windows或者macOS上搭建,通常需要安裝JDK,IntelliJ IDEA,Git,Maven+Navicat/DataGrip+SecureCRT 以及常用的其他工具,例如Chrome,Visual Studio Code,PowerDesigner,Postman,Jenkins,Gitlab等工具。
1.2.2 操作系統
主流的桌面操作系統主要有Windows,macOS,目前絕大部分台式機和筆記本預裝的都是Windows操作系統,其操作界面和常用軟件如下圖所示
目前最新的版本是Windows10 1903,可以使用winver命令查看
而蘋果電腦預裝的都是macOS,其操作界面和常用的軟件如下圖所示
目前最新的版本是macOS 10.1.4.5,可以選擇左上角的蘋果菜單->關於本機查看系統版本
由於macOS相比Windows更適合Java開發,后期所有Java開發相關的內容都在macOS上實現。
1.2.3 開發工具安裝
俗話說,工欲善其事必先利其器,掌握一些日常開發中使用的工具、軟件能夠大大的提高工作效率,工具本身推出的目的也是為了解放生產力。而軟件開發是大型團隊之間協作,在企業日常開發中,軟件的各個版本要跟團隊保持一致,避免因為版本不一致導致各種不必要的問題。
Windows上安裝的應用程序通常都是.exe或者.msi格式,通常只需要去軟件官網下載后雙擊安裝即可。安裝時需要注意安裝的路徑不能包含中文和空格,有些應用軟件安裝時會連帶安裝其他不必要的軟件(全家桶套裝),因為Windows通常是安裝在C盤中,如果你的C盤容量比較小,可以修改軟件的安裝路徑。
macOS上的應用程序通常是.dmg格式,下載打開之后通常都是.kpg或者.app,如果是.kpg需要根據提示進行安裝,如果是.app格式,直接拖放到"應用程序"文件夾即可。
1.3 JDK
1.3.1 JDK概述
JDK(Java Development Kit)是Oracle公司推出的包含了開發和運行Java程序的工具集,原SUN公司在2010年被Oracle公司以74億美金收購,其整體架構如下圖所示。
這里結合Java架構圖理解JDK,JRE和JVM三者之間的關系。
JDK(Java Development Kit)包含了開發和運行Java程序所必備的環境,
JRE(Java Runtime Enviroment)包含了運行Java程序所必備的環境,由JVM和Java核心類庫組成
JVM(Java Virtual Machine)負責解釋執行JDK編譯生成的字節碼文件。
1.3.2 JDK下載
想要開發程序就必須去官網下載和安裝JDK,目前互聯網企業中使用最廣泛的JDK版本為JDK8,而目前(2019/07/15)最新的JDK版本為JDK12,其中Oracle官方長期支持的JDK版本為JDK8和JDK11,分別支持到2025年和2026年。而JDK9,10,12都不是官方長期支持的版本,后期的學習中會覆蓋所有版本涉及到的新特性。而且JDK是向下兼容,這也就意味着JDK8的特性能在JDK11上運行。
在日常開發學習中可以選擇最新的版本(例如JDK12)學習,而在企業開發中,JDK的版本和線上運行的JDK版本保持一致即可。
JDK的下載非常容易,在官網獲取地址,然后點擊同意Lincese,選擇對應的系統版本下載即可,如下圖所示
通常開發環境只要選擇下載Windows或者macOS的版本即可。
而測試環境以及生產環境需要下載Linux版本,因為國內絕大多數的服務器系統都是Linux(Ubuntu Server和CentOS)
而Java之所以能跨平台的本質原因是Oracle公司針對不同的操作系統實現了不同的JDK,Java程序只需要和JDK交互即可,JDK屏蔽了底層操作系統的差異性從而實現跨平台。
1.3.3 macOS安裝JDK12
Oracle官方針對JDK提供了各個平台的安裝向導,讀者們可以根據自己的操作系統版本查找對應的文檔進行安裝,這里以JDK12的安裝為例,介紹macOS下JDK12的安裝過程。
首先下載JDK,Chrome下載軟件的默認路徑就是下載,如下圖所示,然后雙擊JDK-12.0.1_osx-64_bin.dmg文件
會看到JDK 12.0.1.pkg文件
然后會正式進入JDK的安裝過程,首先是介紹
然后選擇安裝類型,默認是標准安裝
此過程會提示需要輸入密碼,等待片刻之后JDK就會安裝成功
最后會提示是否刪除安裝文件,我這里就不刪除了。
最后需要驗證下JDK是否安裝成功,打開終端軟件iTerm,然后輸入命令javac -version 和
java -version,看到如下命令輸出即可。
1.3.4 macOS JDK配置
macOS版的JDK默認的安裝路徑是/Library/Java/JavaVirtualMatchines,如下圖所示,分別安裝了JDK8,JDK11和JDK12,最后安裝的是JDK12,所以javac -version和java -version命令輸出的都是JDK12的相關信息。
如果想要在終端中使用其他的JDK版本,則需要在/etc/profile文件中配置JAVA_HOME和PATH,JAVA_HOME顧名思義指的就是Java的安裝家目錄,其他Java編寫的程序(例如Maven,Tomcat)會依賴這個變量,而PATH是系統路徑,它的作用就是系統在執行命令時執行的路徑,當我們執行命令時,系統會首先在當前路徑下找命令對應的可執行程序,然后去PATH路徑下找。
首先打開終端程序iTerm,然后輸入命令sudo vim /etc/profile
使用vim修改profile文件
此時vim編輯器處於閱讀模式,需要輸入i進入編輯模式,然后輸入如下內容
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.3.jdk/Contents/Home
export PATH=$PATH:$JAVA_HOME/bin

最后按esc推出編輯模式,再按wq!保存文件並退出。
可以使用cat /etc/profile 命令查看編輯后的profile文件內容
liuguangleideMacBook-Pro:~ liuguanglei$ cat /etc/profile
# System-wide .profile for sh(1)
if [ -x /usr/libexec/path_helper ]; then
eval `/usr/libexec/path_helper -s`
fi
if [ "${BASH-no}" != "no" ]; then
[ -r /etc/bashrc ] && . /etc/bashrc
fi
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-11.0.3.jdk/Contents/Home
export PATH=$PATH:$JAVA_HOME$/bin
此時的配置修改並沒有生效,還需要使用source /etc/profile命令讓修改的配置生效。
然后再次使用
liuguangleideMacBook-Pro:~ liuguanglei$ source /etc/profile
然后再次運行javac -version和java -version命令,輸出的運行結果顯示JDK版本已經切換到JDK11.0.3
liuguangleideMacBook-Pro:~ liuguanglei$ javac -version
javac 11.0.3
liuguangleideMacBook-Pro:~ liuguanglei$ java -version
java version "11.0.3" 2019-04-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.3+12-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.3+12-LTS, mixed mode)
1.4 Java版HelloWorld
HelloWorld作為一門編程語言的入門程序,如果能夠編寫和運行HelloWorld,表示邁向編程入門的大門了,Java版本的HelloWorld需要經過編寫、編譯、運行三個步驟。
1.4.1編寫Java源文件
為了照顧初學者,這里使用macOS+JDK+Visual Stuido Code編輯器來實現編寫Java源文件,開發環境具體的版本如下所示
軟件名稱 | 軟件版本 |
---|---|
操作系統 | macOS10.14.5 |
JDK | JDK11.0.3 |
編輯器 | Visual Studio Code 1.36.1 |
在編寫源文件之前首先在/Users/liuguanglei/Documents/下創建一個code目錄,用來存放Java程序的源文件。
然后去Visual Studio Code的官網下載並安裝,官網提供了各個操作系統的版本下載。
下載之后將VSCode-darwin-stable.zip包解壓后將Visual Studio Code拖放到“應用程序”文件夾即可使用了。
首先啟動Visual Studio Code
然后打開/User/liuguanglei/Documents/code文件夾
選擇code目錄,即后期編寫的代碼都會存在該目錄。
然后在code目錄下創建源文件HelloWorld.java
Java程序的源文件都是.java結尾,為了方便閱讀代碼,在編寫源文件中應該適當的添加Tab和換行。
HelloWorld.java源文件的內容如下圖所示
源文件的Java代碼如下所示
public class HelloWorld{
public static void main(String[]args){
System.out.println("Hello World With macOS & Visual Studio Code");
}
}
每個Java源文件可以包含多個class,但是只能有一個class使用public修飾,而且public修飾的類名必須和源文件名一致。針對包含多個class的源文件,javac編譯源文件時生成對應數量的class文件,字節碼的文件名和源文件中的class類名一致。
Windows不區分大小寫,Java嚴格區分大小寫,例如System和system是完全不同的含義。
1.4.2 編譯Java源文件
JDK中提供了編譯Java源程序的命令javac,由於之前在/etc/profile文件中配置過JAVA_HOME和PATH,因此可以在系統的任意路徑下使用javac命令編譯java源程序。
首先在終端中使用cd命令切換到相對路徑 Documents/code目錄,然后使用javac命令編譯源文件HelloWorld.java,如下圖所示。

liuguangleideMacBook-Pro:~ liuguanglei$ cd Documents/code
liuguangleideMacBook-Pro:code liuguanglei$ javac HelloWorld.java
javac編譯HelloWorld.java會生成HelloWorld.class的字節碼文件
1.4.3 運行Java程序
JDK中提供了運行Java程序的命令java,在終端中運行java HelloWorld即可運行java程序,命令如下所示。
liuguangleideMacBook-Pro:code liuguanglei$ java HelloWorld
Hello World With macOS & Visual Studio Code #程序輸出結果
如果想要獨立運行Java程序,源文件中必須包含固定格式的main方法,main方法是Java程序的執行入口,所有的代碼都在這里開始執行,代碼片段如下所示
public static void main(String[]args){
}
而如果想要在運行Java程序時想要看到效果,可以使用System.out.println()
輸出語句實現,它能輸出傳遞數據的內容並完成換行,例如這里的"Hello World With macOS & Visual Studio Code"。如果不想換行,可以使用System.out.print()
實現。輸出語句在后期調試程序時也會用於觀察程序運行的數據變化。
main方法花括號{}中的每條語句語句以英文分號結束,例如
System.out.println("HelloWorld");
1.4.4 Visual Studio Code的Java插件使用
每次在Visual Studio Code中編寫完Java源程序后還需要打開終端,切換到源程序的路徑下,然后使用javac和java命令編譯和運行Java程序,此過程是非常繁瑣的,Visual Studio Code提供了Java插件,可以讓開發者們非常方便的運行和調試Java程序。
首先切換到Visual Studio Code的Extends視圖,然后搜索Java Extension Pack,點擊安裝即可,如下圖所示
安裝完成以后,需要重啟Visual Studio Code,然后再次打開HelloWorld.java源文件,便可以看到出現Run和Debug兩個按鈕,分別用於運行和調試Java程序。
運行程序只需要點擊Run,然后觀察DEBUG CONSOLE的輸出結果即可。
如果想要在Visual Stuido Code中切換Java的版本(例如切換到JDK1.8),可以修改
/Users/liuguanglei/Library/Application Support/Code/User 路徑下的setting.json文件,添加配置 "java.home":"/Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home" 即可。
如果想要測試效果,可以借助JDK的API實現,應用程序SystemProperty.java如下所示
public class SystemProperty{
public static void main(String[]args){
//獲取所有的Java內置屬性
System.getProperties().list(System.out);
//輸出Java的版本信息
System.out.println("當前使用的Java版本信息是"+System.getProperty("java.version"));
}
}
觀察程序輸出結果,發現在Visual Studio Code中已經切換為JDK1.8
如果想要了解更多關於Visual Studio Code的內容,可以訪問官網https://code.visualstudio.com/docs?start=true
1.5 Java程序的運行機制
Java源程序首先要經過C語言實現的javac編譯器將源文件編譯生成和平台無關的字節碼文件(.class結尾的文件),如果源文件中有Java語法錯誤,則會導致無法編譯通過
然后在運行時通過Java虛擬機內嵌的解釋器將字節碼轉換為真正的機器碼。
源程序是需要遵守Java語言規范,字節碼文件是需要遵守JVM規范。
如果想要了解Java語言規范和JVM規范,可以拜讀官方文檔,其官網地址是https://docs.oracle.com/javase/specs/index.html
1.6 注釋
1.6.1 注釋概述
注釋(Comment)是用於描述程序的文字信息,Java中的注釋分為如下三種
- 單行注釋:注釋一行內容,使用
//
表示,通常在方法內容使用 - 多行注釋 注釋多行內容, 使用
/**/
表示,通常在方法內部使用,多行注釋不能嵌套,否則會發生編譯錯誤 - 文檔注釋 用於生成Java API文檔,使用
/***/
表示,通常在類上,屬性上和方法上使用,可以使用javadoc -d 文檔目錄 源文件名生成API文檔
在日常開發中應該多寫注釋,便於程序后期維護,而在程序調試的過程中,也可以通過注釋部分代碼來調試程序,注釋的內容在javac編譯時都會刪除,不會影響程序的運行結果。
1.6.2 注釋的使用
源程序HelloWorld.java中添加了三種注釋。
/** * Java版本HelloWorld */
public class HelloWorld{
/** * 程序的入口,所有代碼從這里開始執行 * @param args */
public static void main(String[]args){
//向終端輸出Hello World With macOS & Visual Studio Code
System.out.println("Hello World With macOS & Visual Studio Code");
/* * 學習編程的方法 * 1. 看視頻 * 2. 敲代碼 * 3.總結文章,發博客 */
}
}
再次運行結果時不會影響程序的運行結果
1.6.3 文檔注釋
文檔注釋是使用JDK提供的javadoc工具生成基於網頁的API文檔,我們可以在終端上運行javadoc -d 路徑 源文件.java 生成幫助文檔。
liuguangleideMacBook-Pro:code liuguanglei$ javadoc -d /Users/liuguanglei/Documents/doc/ HelloWorld.java
正在加載源文件HelloWorld.java...
正在構造 Javadoc 信息...
標准 Doclet 版本 11.0.3
正在構建所有程序包和類的樹...
正在生成/Users/liuguanglei/Documents/doc/HelloWorld.html...
HelloWorld.java:8: 警告: @param 沒有說明
* @param args
^
正在生成/Users/liuguanglei/Documents/doc/package-summary.html...
正在生成/Users/liuguanglei/Documents/doc/package-tree.html...
正在生成/Users/liuguanglei/Documents/doc/constant-values.html...
正在構建所有程序包和類的索引...
正在生成/Users/liuguanglei/Documents/doc/overview-tree.html...
正在生成/Users/liuguanglei/Documents/doc/index-all.html...
正在構建所有類的索引...
正在生成/Users/liuguanglei/Documents/doc/allclasses-index.html...
正在生成/Users/liuguanglei/Documents/doc/allpackages-index.html...
正在生成/Users/liuguanglei/Documents/doc/deprecated-list.html...
正在構建所有類的索引...
正在生成/Users/liuguanglei/Documents/doc/allclasses.html...
正在生成/Users/liuguanglei/Documents/doc/allclasses.html...
正在生成/Users/liuguanglei/Documents/doc/index.html...
正在生成/Users/liuguanglei/Documents/doc/help-doc.html...
1 個警告
然后使用Chrome打開/Users/liuguanglei/Documents/doc/目錄下的index.html文件,便會看到如下的JDK API文檔信息。
1.7 Java API 文檔使用
JDK中封裝了大量開發中常用的API(Application Programming Interface),其文檔也是使用javadoc實現的,JDK12的API文檔地址是 https://docs.oracle.com/en/java/javase/12/docs/api/index.html
后期會學習JDK提供的日常開發中常用類,可以使用搜索框搜索指定的類(例如java.lang.String)來查看類提供的方法,成員變量等等信息,如下圖所示。
macOS還可以通過安裝應用程序Dash來實現離線查閱JDK幫助文檔
Dash 是使用與Mac OS平台的軟件編程文檔管理工具,可以瀏覽API文檔,以及管理代碼片段工具。Dash自帶了豐富的API文檔,涉及各種主流的編程語言和框架。 Dash內置了豐富的API文檔,讓我們集中管理API文檔,包括下載、搜索、查閱並支持集成到XCode、Alfred等軟件中,非常的強大!
下載安裝Dash后,啟動Dash,然后點擊Download Docsets
在搜索框中搜JavaSE,然后選擇對應的版本下載即可。
下載完成之后,即使沒有網絡,也可以在Dash中查閱JDK API文檔