計算機已經成爲人類大腦的延伸,成爲不可或缺的一部分。而算法是計算機的靈魂,編程語言是塑造計算機靈魂的工具。讓計算機具有"靈魂",能夠按照人的意志運行,甚至某天按照計算機本身的意志運行,其核心就是算法。javascript
計算機程序設計語言經歷了機器語言到彙編語言和高級程序設計語言三個階段,其特色是使得程序員用編程語言開發、測試、部署應用程序愈來愈方便、高效。可是是以犧牲效率爲代價,可是隨着計算機硬件的快速發展,絕大多數應用場景的效率損失能夠忽略不計。php
機器語言
計算機發展的最先期,程序員編寫程序採用二進制的指令(010010101)來實現的,而每種CPU都有各自不一樣的指令系統(SPARC/Intel X86/ARM),所以在不一樣的機器上使用不一樣的機器語言實現。其特色是性能特別高效,而面向機器編程也就意味着不能移植,須要手動處理底層硬件的差別性,並且二進制的指令難以理解和維護。html
彙編語言
隨着時代和計算機技術的發展,彙編語言和編譯器的出現解決了機器語言須要記住很是多的二進制機器指令的難題,可是仍是沒有從根本上解決移植性的問題,只是將機器指令轉換爲易懂的英文單詞,而後由編譯器編譯成機器指令,由於計算機終歸揭底只能識別二進制的0001110100110機器指令,並且彙編語言是面向機器的,不一樣機器(SPARC/Intel X86/ARM)的彙編指令是不相同的。儘管如此彙編語言目前仍然在工業電子編程、軟件的加密解密和計算機病毒分析等場景普遍使用。java
高級程序設計語言
高級程序設計語言的高級之處體如今開發人員在編寫程序時無需關心計算機底層硬件差別而只須要專一於業務模塊實現便可。並且相對於機器語言、彙編語言而言,高級語言學習起來更加容易,所以會有更加充足的人力資源,葉更容易開發大型商業軟件,例如Windows、macOS、Linux等操做系統都是使用C/C++實現。國內的阿里巴巴在電商、物流、金融、支付領域大量使用Java實現。python
若是想知道目前主流的編程語言有哪些,能夠訪問tiobe 首頁獲取編程語言排行榜。程序員
編程語言 | 應用場景 |
---|---|
C | 硬件驅動、操做系統、系統軟件 |
C++ | 系統軟件、網絡通信、科學計算 、遊戲 |
C# | Windows應用,Web應用、遊戲 |
Java | 大型互聯網應用(淘寶、天貓),Android,大數據 |
Go | 高併發、區塊鏈、微服務 |
Kotlin | Android應用開發 |
Swift | macOS,iPhone,iPad應用開發 |
Python | 人工智能、機器學習、自動化運維、數據分析 、圖形處理、科學計算、多媒體應用 |
JavaScript | 瀏覽器端、服務端、PC桌面 |
Scala | 大數據開發 |
那麼若是你做爲初學者,面對如此之多的編程語言,到底應該先從哪門語言上車呢?若是你想深刻的學習其餘語言和架構相關的知識以前建議熟練掌握C語言。由於C++/Java/C#等編程語言都模仿了C語言。不管哪一種語言,都是實現目標的工具,而不是目標自己。算法
而不出意外的話,個人全棧之路系列會覆蓋上述的十種編程語言,目的是實現全平臺(Windows,Linux,macOS)應用開發、測試、部署。shell
起源
1991年,Sun公司的James Golsing領導的工程師小組想要開發一種用於像有線電視機頂盒這樣的消費類電子產品的小型計算機語言,該產品的特色是因爲不一樣的廠商選擇不一樣的CPU和操做系統,所以要求該語言不能和特定的體系結構綁定在一塊兒,也就是跨平臺的。最初將這個語言命名爲Oak,而後發現已經有一種語言叫這個名字,而後改成Java。macos
流行
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/Alibaba-Spring-Cloud,Hadoop,Spark,Flink/Android)。
運行平臺
Java程序是運行在JVM(Java Virtual Machine)之上的,這就是Java程序跨平臺實現的本質緣由,並且因爲Java的開放性,有愈來愈多的語言是運行在JVM之上的,例如大數據處理語言Scala,Android開發的Kotlin以及Clojure,Groovy等等。
Java是基於C/C++基礎之上演進而來,可是不一樣於C/C的是Java是純粹的面嚮對象語言,捨棄了C語言中容易引發錯誤的指針,並引入了垃圾回收機制。
相對於C/C而言,Java更加簡單易用,開發效率更高,並且基於JVM實現了跨平臺,也支持分佈式應用開發、高併發、高可用、高性能等應用場景。
Java自從1998年以後將Java分爲三個版本,分別是JavaSE,JavaEE和JavaME,不一樣的版本有不一樣的應用場景。
JavaSE(Java Standard Edition):標準版Java,提供了完整的Java核心API,主要用於桌面應用開發,不過目前桌面開發基本都基於C/C++實現。
JavaEE(Java Enterprise Edition):企業式Java,主要用於企業級後臺服務,大型分佈式互聯網應用開發。
JavaME(Java Micro Edition):嵌入式Java,主要用於開發嵌入式設備的產品,例如塞班手機遊戲(已經消亡)。
因爲目前Java主要的擅長領域是企業級後臺服務開發、Android移動應用開發以及大數據應用開發,而Java語言是它們的基石語言,所以不管是從事企業級後臺服務開發,仍是Android以及大數據應用開發,都要先從JavaSE入門,而後再學習企業級應用以及大型分佈式互聯網應用相關的Java技術棧,例如MytBatis,Spring Framework/Spring Boot/Spring Cloud,Alibaba Spring Cloud等等。
俗話說,工欲善其事必先利其器,掌握一些平常開發中使用的工具、軟件可以大大的提升工做效率,工具自己推出的目的也是爲了提升和解放生產力。而軟件開發是大型團隊之間協做,須要注意的是在企業平常開發中,軟件的各個版本要跟團隊保持一致,避免由於版本差別性而產生沒必要要的問題。
Windows上安裝的應用程序一般都是.exe或者.msi格式,一般只須要去軟件官網下載後雙擊安裝便可。安裝時須要注意安裝的路徑不能包含中文和空格,有些應用軟件安裝時會連帶安裝其餘沒必要要的軟件(全家桶套裝),由於Windows一般是安裝在C盤中,若是你的C盤容量比較小,能夠修改軟件的安裝路徑。
macOS上的應用程序一般是.dmg格式,下載打開以後一般都是.kpg或者.app,若是是.kpg須要根據提示進行安裝,若是是.app格式,直接拖放到"應用程序"文件夾便可。
Java開發環境主要是在Windows或者macOS上搭建,一般須要熟練使用JDK,IntelliJ IDEA,Git,Maven+Navicat/DataGrip+XShell/SecureCRT 以及經常使用的其餘工具,例如Chrome,Visual Studio Code,PowerDesigner,Postman,Jenkins,Gitlab等工具。
JDK(Java Development Kit)原來是SUN公司推出的包含了開發和運行Java程序的工具集,而SUN公司在2010年被Oracle公司以74億美金收購,也就意味着若是想要下載JDK,須要去Oracle官網下載。
JDK總體架構示意圖
結合Java架構圖理解JDK,JRE和JVM三者之間的關係。
JDK(Java Development Kit)包含了開發和運行Java程序所必備的環境,
JRE(Java Runtime Enviroment)包含了運行Java程序所必備的環境,主要由JVM和Java核心類庫組成
JVM(Java Virtual Machine)負責解釋執行JDK編譯生成的字節碼文件,針對不一樣的操做系統(Windows,Linux,macOS)官方提供了不一樣的JVM實現來實現Java程序的跨平臺。
這裏回顧下幾個重點版本的JDK發佈歷史
JDK5.0是JDK發展史上具備里程碑意義的版本,具備許多新特性,例如可變參數、自動拆裝箱,泛型、註解等等,JDK1.5等同於JDK5.0。
JDK7.0是Oracle公司09年收購SUN公司以後發佈的第一個版本,也就意味着之後下載JDK須要去Oracle官網下載。
JDK8.0是目前互聯網公司使用的主流JDK版本,許多Java的開源框架(例如SpringBoot2.x,Spring Cloud)都是基於該版本開發,也是Oracle公司長期支持的JDK版本。
JDK9.0之後Oracle公司將JDK的發佈週期改成半年發佈一個大的版本,而在企業項目開發時應該選擇互聯網大廠普遍使用,而且是官方長期維護的版本,而不是最新的版本。
目前互聯網企業中使用最普遍的JDK版本爲JDK8,而目前(2019/11/15)最新的JDK版本爲JDK13,其中Oracle官方長期支持的JDK版本爲JDK8和JDK11,分別支持到2025年和2026年。而JDK9,10,12,13都不是官方長期支持的版本,後期的學習中會覆蓋最新版本涉及到的新特性。並且JDK是向下兼容,這也就意味着JDK8的特性能在JDK11上運行。
在平常開發學習中能夠選擇當前最新的版本(例如JDK13)學習,而在企業開發中,JDK的版本和線上環境運行的JDK版本保持一致便可。
若是想要開發Java程序,必須去Oracle官網下載JDK,在進入Oracle官網首頁後下拉頁面找到Resources for Developers
而後在跳轉的頁面中找到Java
而後選擇Java SE Download
而後選擇JDK11
由於JDK11是繼JDK8以後Oracle官方長期維護的版本
而後下載JDK
而後贊成License,並選擇對應的版本下載
由於本人的開發平臺是macOS,所以選擇的是jdk-11.0.5_osx-x64_bin.dmg
當JDK下載完成以後雙擊dmg文件
macOS系統會校驗該文件,而後雙擊JDK11.0.5.pkg啓動安裝
介紹
安裝類型
安裝
當輸入密碼或者使用touchID後,macOS此時會安裝JDK至/Library/Java/JavaVirtualMachines/jdk-11.0.5.jdk目錄下,而且會自動配置環境變量。此時能夠輸入javac -version和java -version來驗證安裝。
安裝摘要
若是你的macOS下同時安裝了多個不一樣的JDK版本(例如JDK11,JDK8),而又想在終端上運行指定的JDK版本(這裏以JDK8爲)的話,此時須要經過配置環境變量來實現。
首先使用su root命令切換到root用戶,而後使用vim /etc/profile編輯profile文件,
此時vim處於閱讀模式,還不能修改文件,能夠經過i鍵進入編輯模式
而後添加JAVA_HOME環境變量,並使用export引用至PATH環境變量,
當在終端上執行java相關命令時會優先查找PATH環境變量對應的路徑。
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home
export PATH=$PATH:$JAVA_HOME
source /etc/profile
命令,此時即可以實現Java版本的切換了。
Visual Studio Code是微軟推出的一款開源、跨平臺(Windows,Ubuntu,macOS)的編輯器,這裏使用它來編寫Java語言的源代碼,固然除了編寫Java代碼以外,還能夠用來編寫C/C++,Python,Go,JavaScript,PHP程序等等。初學者不建議使用相似於IntelliJ IDEA那樣的集成工具,由於其背後隱藏了許多你須要瞭解的細節。
在使用Visual Studio Code以前你須要去官網下載最新的可用版本,關於它的詳細使用官網也提供了豐富的文檔說明。
當下載完成後會獲得一個VSCode-darwin-stable.zip包,咱們只須要將其解壓
而後將解壓後的程序Visual Studio Code拖放到macOS的應用程序文件夾便可使用
拖放完成以後即可以在LaunchPad中啓動它
此時會提示還沒有打開文件夾,咱們須要在/Users/liuguanglei/Documents目錄下建立一個文件夾來存放源文件,這裏我建立一個名爲workspace的文件夾,由於後期會涉及到java,python,go,php,javascript等等語言,所以還須要在workspace目錄下建立一個名爲java的文件夾。
而後再點擊Visual Studio Code的打開文件夾,選擇/Users/liuguanglei/Documents/vs_code/java做爲存放java源文件的目錄
Java源文件都是以.java結尾,這裏在Visual Studio Code中建立一個HelloWorld.java的源文件
而後在源文件中編寫如下內容
public class HelloWorld{
public static void main(String[]args){
System.out.println("macOS10.15.1 & Visual Studio Code HelloWorld With Java");
}
}
HelloWorld源程序詳解
每一個Java源文件能夠包含多個class,可是隻能有一個class使用public修飾,並且public修飾的類名必須和源文件名一致。針對包含多個class的源文件,javac編譯源文件時生成對應數量的class文件,字節碼的文件名和源文件中的class類名一致。
Java程序若是想獨立運行,必須包含固定格式public static void main(String[]args){}的main方法
Java中的每條執行語句都須要包含在代碼塊{}或者是方法,而且以分號(;)結束
控制檯輸出可使用System.out.println(),而後傳遞字符串參數便可。
Java嚴格區分大小寫,例如System和system是徹底不一樣的含義。
編寫完成之後能夠在終端上使用javac編譯該程序,編譯會生成HelloWorld.class文件,而後使用java命令運行該程序,程序的運行結果會在終端上輸出macOS10.15.1 & Visual Studio Code HelloWorld With Java
因爲每次編寫完原文件後,都須要啓動終端來編譯和運行Java程序,這樣效率比較低,咱們可使用Visual Stuido Code提供的Java插件來實現編譯、調試和運行Java程序。
首先在Visual Studio Code的插件商店(Command+Shift+x)中搜索Java,而後找到Java Extension Pack點擊安裝便可,若是想要使用插件,安裝完成後重啓即可使用。
使用插件即可以在源文件中經過點擊Run來運行程序,點擊Debug來調試程序。同時能夠直接在Visual Studio Code中的內置終端查看程序的運行結果。
根據程序的運行結果顯示此時Visual Studio Code程序默認使用的是profile文件中配置的JDK8運行的,若是你想要使用以前安裝的JDK11,能夠經過修改
/Users/liuguanglei/Library/Application Support/Code/User 路徑下的setting.json文件,添加配java home屬性配置,指向JDK11的Home目錄
而後重啓Visual Stuido Code,再次運行HelloWorld程序,能夠從終端上看到輸出信息已經使用了JDK11的版本。
因爲高級編程語言和計算機底層語言是互不相通的,計算機最底層只能識別01010這種二進制的機器指令,所以須要使用工具進行語言之間的轉換。這個就是程序編譯或者解釋的由來。
爲了理解程序編譯和程序解釋,這裏引入兩種語言,分別是高級計算機語言L1,以及低級計算機語言L0。
程序編譯
開發人員使用高級編程語言L1編寫的應用程序經過編譯器生成成計算機底層可以識別的低級語言L0,L0就是計算機實際執行的語言,而編譯器生成的計算機底層識別的二進制機器指令過程就是程序編譯。常見的編譯型語言有C/C++/Objective-C/Go
程序解釋
首先使用L0語言實現另一個程序,也就是解釋器,而後將開發人員使用高級語言L1編寫的應用程序做爲輸入,每一句L1編寫的程序都會在L0中做爲等價的轉換而後執行,解釋的過程就是由L0編寫的解釋器去解釋L1程序。常見的解釋型語言有PHP,Python,JavaScript。
Java源程序首先要通過C語言實現的javac編譯器將源文件編譯生成和平臺無關的字節碼文件(.class結尾的文件),若是源文件中有Java語法錯誤,則會致使沒法編譯經過
而後在運行時經過Java虛擬機內嵌的解釋器將字節碼轉換爲真正的機器碼。
源程序是須要遵照Java語言規範,字節碼文件是須要遵照JVM規範。
若是想要了解Java語言規範和JVM規範,能夠拜讀官方文檔,其官網地址是https://docs.oracle.com/javase/specs/index.html
註釋(Comment)是用於描述程序的文字信息,Java中的註釋分爲以下三種
/**/
表示,一般在方法內部使用,多行註釋不能嵌套,不然會發生編譯錯誤/***/
表示,一般在類上,屬性上和方法上使用,可使用javadoc -d 文檔目錄 源文件名生成API文檔javadoc生成文檔註釋
iuguangleideMacBook-Pro:java liuguanglei$ pwd /Users/liuguanglei/Documents/workspace/java liuguangleideMacBook-Pro:java liuguanglei$ javadoc -d /Users/liuguanglei/Documents/doc/ HelloWorld.java 正在加載源文件HelloWorld.java... 正在構造 Javadoc 信息... 正在建立目標目錄: "/Users/liuguanglei/Documents/doc/" 標準 Doclet 版本 11.0.5 正在構建全部程序包和類的樹... 正在生成/Users/liuguanglei/Documents/doc/HelloWorld.html... 正在生成/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...
查看javadoc生成的網頁文檔
從index.html文件中得知源文件中使用java文檔註釋的內容會出如今網頁中
三種註釋版HelloWorld
/** * Java版本HelloWorld * @author tony ittimelinedotnet@gmail.com * @since JDK11 */
public class HelloWorld{
/* 程序的主入口,從這裏開始執行 */
public static void main(String[]args){
//向終端輸出macOS10.15.1 & Visual Studio Code HelloWorld With Java
System.out.println("macOS10.15.1 & Visual Studio Code HelloWorld With Java");
}
}
在平常開發中應該多寫註釋,便於程序後期維護,而在程序調試的過程當中,也能夠經過註釋部分代碼來調試程序,註釋的內容在javac編譯時都會刪除,不會影響程序的運行結果。
JDK中封裝了大量開發中經常使用的API(Application Programming Interface),其文檔也是使用javadoc工具實現的,JDK11的API文檔地址是 https://docs.oracle.com/en/java/javase/11/docs/api/index.html
後期會學習JDK提供的平常開發中經常使用類,可使用搜索框搜索指定的類(例如java.lang.String)來查看類提供的方法,成員變量等等信息。
例如這裏經過在線API文檔查看java.lang.String類的使用
macOS還能夠經過安裝應用程序Dash來實現離線查閱JDK幫助文檔
Dash 是使用與Mac OS平臺的軟件編程文檔管理工具,能夠瀏覽API文檔,以及管理代碼片斷工具。Dash自帶了豐富的API文檔,涉及各類主流的編程語言和框架。 Dash內置了豐富的API文檔,讓咱們集中管理API文檔,包括下載、搜索、查閱並支持集成到XCode、Alfred等軟件中,很是的強大!
下載安裝Dash後,啓動Dash,而後點擊Download Docsets
在搜索框中搜JavaSE,而後選擇對應的版本下載便可。