Java简介与JDK安装
導航
- 我們為什么需要Java?
- Java發展簡史
- Java語言特性
- Java語言是簡單的
- Java語言是面向對象的
- Java語言是分布式的
- Java語言是健壯的
- Java語言是安全的
- Java語言是體系結構中立的
- Java語言是可移植的
- Java語言是解釋型的
- Java是高性能的
- Java語言是多線程的
- Java語言是動態的
- Java三大版本
- Java SE(J2SE,Java 2 Platform Standard Edition,標準版)
- Java EE(J2EE,Java 2 Platform Enterprise Edition,企業版)
- Java ME(J2ME,Java 2 Platform Micro Edition,微型版)
- JVM、JDK與JRE
- JVM(Java Virtual Machine)
- JRE(Java Runtime Environment)
- JDK(Java Development Kit)
- WIN10下JDK的安裝
- JDK的安裝
- 下載JDK下載
- Java SE 12的安裝
- 環境變量
- 為什么要配環境變量
- 環境變量的配置
- Java版本切換
我們為什么需要Java?
目前計算機語言可以分為三代:機器語言、匯編語言、高級語言。
機器語言,是由"0"和"1"組成的二進制數,機器可以認識,但人應該看不懂。(用的應該,說不定有神人可以輕松看懂)
匯編語言,相較于機器語言,使用了助記符(Mnemonics)代替機器指令的操作碼,用地址符號(Symbol)或標號(Label)代替指令或操作數的地址,方便人們去讀、寫代碼。
//匯編語言代碼示例: LOAD A ADD B STORE C高級語言,相對于機器語言,是一種指令集的體系,更接近自然語言和數學公式的編程,基本脫離了機器的硬件系統,用人們更易理解的方式編寫程序。高級語言并不是特指的某一種具體的語言,而是包括很多編程語言,如的java,c,c++,C#,pascal,python,易語言等。
//高級語言代碼示例: C = A + B;以上三個示例代碼實現的內容是一樣的,從人類可讀可寫性方面,可以很顯然得感覺到我們非常需要高級語言,而Java就是高級語言中的佼佼者。至于Java相較于其他高級語言有什么優勢,我們什么情況下選Java,看了下面的介紹,就會知道了。
Java發展簡史
在百度百科等網站中詳細講了Java的發展歷史,但畢竟長,我只在這里簡要概括一下時間線~
1991年,為了提高電視機頂盒、面包烤箱、移動電話等設備的智能程度,而這些設備嵌入式處理器芯片的種類繁雜,要求開發語言有著很高的跨平臺性,Sun公司成立了一個稱為Green的項目小組,帕特里克、詹姆斯·高斯林、麥克·舍林丹和其他幾個工程師一起組成的工作小組專攻這個技術項目,并產出了一個名為Green(綠色)的操作系統,以及一款名為Oak(橡樹)的面向對象的高級語言。
1995年,對Oak語言申請注冊商標時,發現Oak已經被人使用了,再想了一系列名字之后,最終,使用了提議者在喝一杯Java咖啡(指印尼爪哇島咖啡)時無意提到的Java詞語,所以,Java的圖標也就是一杯冒著熱氣的咖啡。和現在程序員需要熬夜喝咖啡加班極度吻合,哈哈,這也許就是冥冥中自有天意的感覺吧。
1995年,改名后解決商標的問題了,自然是要推出第一個測試版。
1996年,JDK1.0發布。
1997年,JDK1.1發布。
1998年,JDK1.2發布,并很大程度上改進了早期版本的缺陷,具有劃時代的意義,所以開始叫Java2,自從開始Java1.幾也可以直接叫為Java幾。比起現在手機廠商的數字直接跳到20,30的,已經很收斂了。
1999年,發布Java的三個版本:J2SE、J2EE、J2ME。
2004年,J2SE 5.0 (1.5.0)發布。
2006年,J2SE 6.0 發布,并將Java三大版本更名,J2EE更名為Java EE,J2SE更名為Java SE,J2ME更名為Java ME。
2009年,Sun公司被Oracle公司收購。
2011年,Oracle公司發布Java SE 7.0。
2014年,Oracle公司發表Java SE 8.0。
2017年,Oracle公司發表Java SE 9.0發布。
在Java 9之后,Oracle 宣布,將 Java 的發布頻率改為每六個月一次。新的發布周期嚴格遵循時間點,將在每年的3月份和9月份發布,新的發布周期是為了避免出現像Java 8 和Java 9 那樣的延期情況,新的發布計劃不會為了等待某個主要特性完成而延期。如果一個特性還沒有完成,它就不會被合并到發布用的代碼倉庫里。如果錯過了一個版本,就要等待下一次發布。所以,之后的版本很快,截止目前,我在Oracle官網看見版本已經更新到Java SE 13了。
但由于兼容性及安全性問題,據我觀察目前企業多數用Java SE 1.6及Java SE 1.8版本。
Java語言特性
Java的語言特性,也就是優點,各種歸納有很多,推薦別人用嘛可不得使勁夸。
但我由衷覺得最出色的兩點是:1.面向對象 2.跨平臺可移植
1.面向對象
這一點現在應該算不上特別突出了,因為現在的語言基本都是支持面向對象的,連oracle數據庫都支持面向對象編程了。但在據悉在以前還是挺有競爭力的,我學完面向過程的C語言,想學面向對象的語言時,首先想到的就是Java。面向對象,是Java的一大標簽。
2.跨平臺可移植
我最喜歡的就是這一點,關于這點的叫法有很多,跨平臺性、可移植性、平臺相關性等等詞匯,都是說的一個事。(多說一句,我個人挺討厭這些專業術語的,各說一套,怎么讓別人聽不懂怎么來,故作高深似的,希望看見這句話的人就不要再自創高深詞匯了)
很多設備和系統都是有自己的規范,這個很符合市場情況,不然就是壟斷了嘛,百家爭鳴是有利于市場健康發展的。但是這就難為程序員了,同一個程序為了適配不同的設備的和系統,就得寫多套,而Java的跨平臺很好解決了這個事情。至于是怎么解決的,我在下面的JVM介紹中講一下我的認知。
以下內容,摘抄自菜鳥教程
Java語言是簡單的
Java語言的語法與C語言和C++語言很接近,使得大多數程序員很容易學習和使用。另一方面,Java丟棄了C++中很少使用的、很難理解的、令人迷惑的那些特性,如操作符重載、多繼承、自動的強制類型轉換。特別地,Java語言不使用指針,而是引用。并提供了自動的廢料收集,使得程序員不必為內存管理而擔憂。
Java語言是面向對象的
Java語言提供類、接口和繼承等面向對象的特性,為了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實現機制(關鍵字為implements)。Java語言全面支持動態綁定,而C++語言只對虛函數使用動態綁定。總之,Java語言是一個純的面向對象程序設計語言。
Java語言是分布式的
Java語言支持Internet應用的開發,在基本的Java應用編程接口中有一個網絡應用編程接口(java net),它提供了用于網絡應用編程的類庫,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(遠程方法激活)機制也是開發分布式應用的重要手段。
Java語言是健壯的
Java的強類型機制、異常處理、垃圾的自動收集等是Java程序健壯性的重要保證。對指針的丟棄是Java的明智選擇。Java的安全檢查機制使得Java更具健壯性。
Java語言是安全的
Java通常被用在網絡環境中,為此,Java提供了一個安全機制以防惡意代碼的攻擊。除了Java語言具有的許多安全特性以外,Java對通過網絡下載的類具有一個安全防范機制(類ClassLoader),如分配不同的名字空間以防替代本地的同名類、字節代碼檢查,并提供安全管理機制(類SecurityManager)讓Java應用設置安全哨兵。
Java語言是體系結構中立的
Java程序(后綴為java的文件)在Java平臺上被編譯為體系結構中立的字節碼格式(后綴為class的文件),然后可以在實現這個Java平臺的任何系統中運行。這種途徑適合于異構的網絡環境和軟件的分發。
Java語言是可移植的
這種可移植性來源于體系結構中立性,另外,Java還嚴格規定了各個基本數據類型的長度。Java系統本身也具有很強的可移植性,Java編譯器是用Java實現的,Java的運行環境是用ANSI C實現的。
Java語言是解釋型的
如前所述,Java程序在Java平臺上被編譯為字節碼格式,然后可以在實現這個Java平臺的任何系統中運行。在運行時,Java平臺中的Java解釋器對這些字節碼進行解釋執行,執行過程中需要的類在聯接階段被載入到運行環境中。
Java是高性能的
與那些解釋型的高級腳本語言相比,Java的確是高性能的。事實上,Java的運行速度隨著JIT(Just-In-Time)編譯器技術的發展越來越接近于C++。
Java語言是多線程的
在Java語言中,線程是一種特殊的對象,它必須由Thread類或其子(孫)類來創建。通常有兩種方法來創建線程:其一,使用型構為Thread(Runnable)的構造子類將一個實現了Runnable接口的對象包裝成一個線程,其二,從Thread類派生出子類并重寫run方法,使用該子類創建的對象即為線程。值得注意的是Thread類已經實現了Runnable接口,因此,任何一個線程均有它的run方法,而run方法中包含了線程所要運行的代碼。線程的活動由一組方法來控制。Java語言支持多個線程的同時執行,并提供多線程之間的同步機制(關鍵字為synchronized)。
Java語言是動態的
Java語言的設計目標之一是適應于動態變化的環境。Java程序需要的類能夠動態地被載入到運行環境,也可以通過網絡來載入所需要的類。這也有利于軟件的升級。另外,Java中的類有一個運行時刻的表示,能進行運行時刻的類型檢查。
Java三大版本
Java SE(J2SE,Java 2 Platform Standard Edition,標準版)
- Java SE 以前稱為 J2SE。用于開發和部署在桌面、服務器、嵌入式環境和實時環境中使用的 Java 應用程序,比如用于做運行在Windows操作系統上的軟件,但一般在Windows上用微軟的c#做,在Mac OS上用Objective-C 做,所以Java SE的使用有限。但Java SE 包含了支持 Java Web 服務開發的類,并為Java EE和Java ME提供基礎。
Java EE(J2EE,Java 2 Platform Enterprise Edition,企業版)
- Java EE 以前稱為 J2EE。也就是用于做企業級WEB應用的版本。
- 企業版本幫助開發和部署可移植、健壯、可伸縮且安全的服務器端Java 應用程序。Java EE 是在 Java SE 的基礎上構建的,它提供 Web 服務、組件模型、管理和通信 API,可以用來實現企業級的面向服務體系結構(service-oriented architecture,SOA)和 Web2.0應用程序。
- 2018年 Oracle 決定把 JavaEE 移交給開源組織 Eclipse 基金會,但是不希望 JavaEE 繼續使用 Java 這個名字,后來Eclipse 宣布正式將 JavaEE 更名為 JakartaEE。(企業大佬間的愛恨情仇其實也挺有意思的,而且也關系著一項技術的后續發展,有空可以當八卦看看)
Java ME(J2ME,Java 2 Platform Micro Edition,微型版)
- Java ME 以前稱為 J2ME。Java ME 為在移動設備和嵌入式設備(比如手機、PDA、電視機頂盒和打印機)上運行的應用程序提供一個健壯且靈活的環境。Java ME 包括靈活的用戶界面、健壯的安全模型、許多內置的網絡協議以及對可以動態下載的連網和離線應用程序的豐富支持。基于 Java ME 規范的應用程序只需編寫一次,就可以用于許多設備,而且可以利用每個設備的本機功能。
- 如果你用過以前的諾基亞,打開軟件時會有Java的咖啡杯logo,因為塞班系統內含了Java虛擬機,所以可以運行。目前市場上分為IOS和Android兩陣營,雖然Android的開發是基于Java,但Android并不是Java ME。Java ME的市場也是越來越少了。
JVM、JDK與JRE
JVM(Java Virtual Machine)
- JVM是一種用于計算設備的規范,它是一個虛構出來的計算機,被稱為Java虛擬機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。
JVM就是Java跨平臺性的關鍵。 Java程序編譯后的字節碼,就可以在JVM上運行,而同一份代碼,是如何在不同系統上成功跑起來的呢?這就要歸功于JVM的設計,JVM就是一個應用軟件,針對不同的平臺編寫不同版本的JVM程序,Java程序在安裝了JVM的系統上運行時,只需要遵守JVM內的統一規范,而不用再考慮不同系統的差異,這樣就實現了一份代碼各處運行的目的,減少了程序員多次編寫的麻煩。
我們可以舉個微信小程序作為例子來類比理解。 Andorid和IOS設備上的微信源代碼是不一樣的,但是編寫微信時對小程序的規范是統一的,所以一份小程序代碼,只要你手機上有微信,就都可以運行。相比要寫一份Andorid再寫一份IOS程序方便了很多。
JRE(Java Runtime Environment)
- JRE是java運行時環境,包含了java虛擬機(JVM),java基礎類庫。是使用java語言編寫的程序運行所需要的軟件環境,是提供給想運行java程序的用戶使用的。
JDK(Java Development Kit)
- JDK是java開發工具包,是程序員使用java語言編寫java程序所需的開發工具包,是提供給程序員使用的。JDK包含了JRE,同時還包含了編譯java源碼的編譯器javac,還包含了很多java程序調試和分析的工具:jconsole,jvisualvm等工具軟件,還包含了java程序編寫所需的文檔和demo例子程序。
- 我們可以在JDK安裝目錄中,找到JRE,從文件上可以明顯看出JDK與JRE的包含關系。
- 也就是說,如果你需要運行java程序,只需安裝JRE就可以了。如果你需要編寫java程序,需要安裝JDK。
WIN10下JDK的安裝
JDK的安裝
下載JDK下載
??下載鏈接: 點此跳轉至Oracle
??選擇與自己系統位數對應的JDK下載即可。
Java SE 12的安裝
??我這里只有當時12剛出時,安裝嘗鮮的截圖,所以以12為例,
??JDK安裝一直點擊下一步即可。這里的路徑是可以更改的,但一般不做更改。
??多個JDK版本放在同一個父級目錄下,方便查找與切換。
??Java SE 12安裝完JDK直接結束了,以往版本此時應該會提示繼續安裝JRE,而JDK其實已包含了JRE,所以我們可以跳過JRE的安裝。
環境變量
為什么要配環境變量
??path(環境變量)是dos以前的內部命令,windows繼續沿用至今。用作運行某個命令的時候,本地查找不到某個命令或文件,會到這個聲明的目錄中去查找。
??java的編譯程序是在jdk的bin目錄下的javac.exe。為了window運行java編譯命令的時候,能查找到該程序,所以我們需要將java的bin目錄聲明到path中。
環境變量的配置
右鍵“此電腦”–>屬性–>高級系統設置–>高級–>環境變量
在windows中,系統的環境變量大于用戶的環境變量,所以一般我選擇在系統變量中,來配置。
新建JAVA_HOME
然后在變量Path中,新增%JAVA_HOME%\bin
?然后一步步點擊“確認”直至退出即可。
?此時使用win+R鍵,輸入cmd并確認,調出cmd命令窗口,執行java -verison,即可看到java版本,如圖即為配置成功。
??到這,有沒有想我們為什么不直接在Path中配置到bin,而要新建一個Java_HOME呢?
其實直接配置完整路徑至bin,部分情況下是不影響的。但開發過程中有一些軟件,如Tomcat,運行時會找你電腦的JAVA_HOME路徑,所以得新增。并且JAVA_HOME路徑也方便了我們進行Java版本的切換。
Java版本切換
??在實際開發工作中,可能會同時開發多個系統,而這些系統使用的JDK版本不同,所以經常會碰到需要同時安裝多個JDK,然后根據需要進行切換的情況。
??正常情況下,只需要修改JAVA_HOME這個環節變量,并注意Path就可以了。
??如果僅修改JAVA_HOME不成功,那么注意以下幾點:
- 1.檢查C:\Windows\System32文件夾下,是否有java.exe、javaw.exe、javaws.exe三個可執行文件,若有,則進行刪除。在安裝JDK之后,會自動將java.exe、javaw.exe、javaws.exe文件復制到C:\Windows\System32目錄,由于這個目錄在WINDOWS環境變量中的優先級高于path設置的環境變量優先級,所以會造成錯誤。
- 2.檢查Path環境變量對java的路徑引用,在安裝JDK8的時候,會自動給Path配上C:\ProgramData\Oracle\Java\javapath;刪除此配。
- 3.切換完后,cmd命令窗口要重啟,再檢查java版本…
總結
以上是生活随笔為你收集整理的Java简介与JDK安装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringCould整合oauth2
- 下一篇: (Java生产者消费者问题)http:/