1. 程式人生 > >第1章 java語言概述及開發環境

第1章 java語言概述及開發環境

既然學習java那總得知道java是怎麼來的
java語言的大致起源:
   Java是印度尼西亞爪哇島的英文名稱,因盛產咖啡而聞名。Java語言中的許多庫類名稱,多與咖啡有關,如JavaBeans(咖啡豆)、NetBeans(網路豆)以及ObjectBeans (物件豆)等等。SUN和JAVA的標識也正是一杯正冒著熱氣的咖啡。任職於太陽微系統的詹姆斯·高斯林等人於1990年代初開發Java語言的雛形,最初被命名為Oak,目標設定在家用電器等小型系統的程式語言,應用在電視機、電話、鬧鐘、烤麵包機等家用電器的控制和通訊。由於這些智慧化家電的市場需求沒有預期的高,Sun公司放棄了該項計劃。隨著1990年代網際網路的發展,Sun公司看見Oak在網際網路上應用的前景,於是改造了Oak,於1995年5月以Java的名稱正式釋出。Java伴隨著網際網路的迅猛發展而發展,逐漸成為重要的網路程式語言。

雜七雜八的知識太多又不能不知道
Java的幾個版本:
JavaSE(J2SE)(Java2 Platform Standard Edition,java平臺標準版)
JavaEE(J2EE)(Java 2 Platform,Enterprise Edition,java平臺企業版)
JavaME(J2ME)(Java 2 Platform Micro Edition,java平臺微型版)。
現在才知道這些縮寫的字母是什麼含義了

Java的特點:
1.java的風格類似C++,從某種意義上講,java是C++的一個變種
2.java摒棄了C、C++中的容易引發錯誤和難以理解的指標,結構,以及記憶體管理等
3.java提供了豐富的類庫,很方便開發程式
4.java是完全面向物件的語言,支援 繼承,過載,多型等面向物件的特性 C++是面向物件和麵向過程的混合語言, C是純面向過程的語言
5.java是一種強型別的語言,比C/C++檢查還要嚴格,java區分大小寫字母
6.java提供了自動垃圾回收機制gc,有效避免了C、C++的記憶體洩漏問題
7.java禁止非法訪問記憶體,因為java沒有指標,記憶體的申請和釋放
8.跨平臺,java的原始碼編譯成結構中立的中間格式,這種格式與機器無關,只要在安裝有JVM(java虛擬機器)的電腦上,都能執行這種與機器無關的中間檔案,.class ,java一次編譯,到處執行
9.對於不同的作業系統,會有不同的java虛擬機器,這也就決定了java的可移植性
10. java支援多執行緒,簡單理解,如果是單核CPU,那麼會通過時間片輪轉的方式,多執行緒執行程式,如果是多核CPU,那麼就可以
理解為,兩個或多個執行緒同時執行 還不理解的可以去看碼農翻身裡面的故事很生動

高階語言執行機制:
計算機高階語言按照程式的執行方式可以分為編譯型解釋型兩種
        編譯型語言是指使用專門的編譯器,針對特定的平臺(作業系統)將某種高階語言原始碼一次性“翻譯”成可被該平臺硬體執行的機器碼(包括機器指令和運算元)。幷包裝成該平臺所能識別的可執行性程式的格式,這個轉換的過程成為編譯,編譯生成的可執行程式可以脫離開發環境,在特定的平臺上獨立執行。
有些程式編譯結束後,還可能需要對其他編譯好的目的碼進行連結,即組裝兩個以上的額的目的碼模組生成最終的可執行程式,通過,這種方式實現低層次的程式碼複用。
因為編譯型語言是一次性地編譯成機器碼,所以可以脫離開發環境獨立執行,而且通常執行的效率較高,但因為編譯型語言的程式被編譯成特定平臺上的機器碼,因此編譯生成的可執行性程式通常無法移植到其他平臺上,如果需要移植,則必須將原始碼複製到特定的平臺上,針對特定的平臺進行修改,至少也需要採用特定平臺上的編譯器重新編譯
現有的C 、C++/Pascal等高階語言都屬於編譯型語言。

        解釋型語言是指使用專門的直譯器對源程式逐行進行解釋成特定平臺的機器碼並立即執行的語言。解釋型語言通常不會進行整體型的編譯和連結處理,解釋型語言相當於把編譯型語言中的編譯和解釋的過程混合到一起去完成。
可以認為:每次執行解釋性語言的程式都需要進行一次編譯,因此解釋型語言的程式執行效率通常較低,而且不能脫離直譯器獨立執行,但解釋型語言有一個優勢:跨平臺比較容易,只需要提供特定的平臺的直譯器即可,每個特定平臺上的直譯器負責將源程式解釋成特定平臺的機器指令即可,解釋型語言可以方便地實現源程式級的移植,但這也是以犧牲程式執行效率為代價的,
現有的Ruby、Python等語言都屬於解釋型語言。

Java語言比較特殊,由於Java語言的編寫的程式需要經過編譯的步驟,但這個編譯的步驟並不會生成特定的平臺的機器碼,而是生成一種與平臺(作業系統)無關的位元組碼(也就是.class檔案)。當然,這種位元組碼是不可執行性的。必須使用Java直譯器來解釋執行。因此,可以認為:Java語言既是編譯型語言,也是解釋型語言。要經過這兩步驟。
在這裡插入圖片描述
Java語言裡負責解釋執行位元組碼的檔案就是Java虛擬機器,即JVM(Java Virtual Machine)
JVM是可執行Java位元組碼檔案的虛擬計算機。所有平臺上的JVM向編譯器提供相同的程式設計介面,而編譯器只需要面向虛擬機器,生成虛擬機器能理解的程式碼,然後由虛擬機器來解釋執行。當使用Java編譯器編譯Java程式時,生成的是與平臺無關的位元組碼,這些位元組碼不面向任何具體平臺,只面向JVM。
不同平臺的JVM都是不同的,但他們都提供了相同的介面。JVM是Java程式跨平臺的關鍵部分,只要為不同的平臺實現了相同的虛擬機器,編譯後的Java位元組碼可以在該平臺上執行。顯然,相同的位元組碼程式需要在不同的平臺上執行,幾乎是不可能的,只有通過中間的轉換器才可以實現,JVM就是這個轉換器
Java虛擬機器(Java Virtal Machine)

1、JVM是一個虛擬的計算機,具有指令集並使用不同的儲存區域。負責執行指令,管理資料、記憶體、暫存器。
2、對於不同的平臺(作業系統),有不同的虛擬機器。
3、Java虛擬機器機制遮蔽了底層執行平臺的差別,實現了"一次編譯,到處執行"。
在這裡插入圖片描述

JDK JRE JVM關係:
在這裡插入圖片描述

直觀圖
在這裡插入圖片描述

還要再解釋一下什麼是JDK, JRE, SDK, API
JDK(Java Development Kit Java開發工具包)
其中包括了Java編譯器、JVM、大量的Java工具以及Java基礎API裡面是Java類庫和Java的語言規範,JAVA的執行環境(JVM+Java系統類庫 == JRE)和JAVA工具,其中的JAVA工具:編譯工具(javac.exe) 打包工具(jar.exe)等, 安裝了JDK就不用再安裝JRE了

JRE(JavaRunTimeEnvirment的簡稱) ,指Java執行環境,執行JAVA程式所必須的環境的集合,包含JVM標準實現及Java核心類庫。–執行應用程式是JRE裡的靠JVM,但還需要類載入器等基礎類庫

SDK ( Software Development Kit 的縮寫) 中文意思就是“軟體開發工具包”
可以這麼說:輔助開發某一類軟體的相關文件、範例和工具的集合都可以叫做“SDK”。
SDK內容有好多這裡是通俗的說

API ( Application Programming Interface) 其實就是作業系統留給應用程式的一個呼叫介面(預先定義的函式),應用程式通過呼叫作業系統的 API 而使作業系統去執行應用程式的命令(動作),
是一些預先定義的函式,目的是提供應用程式與開發人員基於某軟體或硬體得以訪問一組例程的能力,而又無需訪問原始碼,或理解內部工作機制的細節。

沒有JDK的話,無法編譯Java程式(指java原始碼.java檔案),如果想只執行Java程式(指class或jar或其它歸檔檔案),要確保已安裝相應的JRE。

參考以下部落格
https://www.cnblogs.com/lindroid/p/5438275.html
https://blog.csdn.net/ytm15732625529/article/details/80383343
https://baijiahao.baidu.com/s?id=1589560255789375228&wfr=spider&for=pc