## Java概述
#### 什么是Java
Java是一種高級計算機語言,它是由SUN 公司(已被Oracle公司收購)于1995年5月推出的一種可編寫跨平臺應用軟件、完全面向對象的程序設計語言。Java語言簡單易用、安全可靠,主要面向Internet編程,自問世以來,與之相關的技術和應用發展得非常快。在計算機、移動電話、家用電器等領域中,Java技術無處不在。
為了使軟件開發人員、服務提供商和設備生產商可以針對特定的市場進行開發,SUN公司將Java劃分為三個技術平臺,它們分別是JavaSE、JavaEE和JavaME。
- **JavaSE(JavaPlatformStandardEdition)標準版**
是為開發普通桌面和商務應用程序提供的解決方案。JavaSE是三個平臺中最核心的部分,JavaEE和JavaME都是從JavaSE的基礎上發展而來的,JavaSE平臺中包括了Java最核心的類庫,如集合、IO、數據庫連接以及網絡編程等。
- **JavaEE(JavaPlatformEnterpriseEdition)企業版**
是為開發企業級應用程序提供的解決方案。JavaEE可以被看作一個技術平臺,該平臺用于開發、裝配以及部署企業級應用程序,其中主要包括Servlet、JSP、JavaBean、JDBC、EJB、WebService等技術。
- **JavaME(JavaPlatform MicroEdition)小型版**
是為開發電子消費產品和嵌入式設備提供的解決方案。JavaME主要用于小型數字電子設備上軟件程序的開發。例如,為家用電器增加智能化控制和聯網功能,為手機增加新的游戲和通訊錄管理功能。此外,JavaME 提供了HTTP等高級Internet協議,使移動電話能以Client/Server方式直接訪問Internet的全部信息,提供最高效率的無線交流。
#### Java語言的特點
Java語言是一門優秀的編程語言,它之所以應用廣泛,受到大眾的歡迎,是因為它有眾多突出的特點,其中最主要的特點有以下幾個。
- **簡單**
Java語言是一種相對簡單的編程語言,它通過提供最基本的方法來完成指定的任務,只需理解一些基本的概念,就可以用它編寫出適合于各種情況的應用程序。Java丟棄了C++中很難理解的運算符重載、多重繼承等模糊概念。特別是Java語言不使用指針,而是使用引用,并提供了自動的垃圾回收機制,使程序員不必為內存管理而擔憂。
- **面向對象**
Java語言提供了類、接口和繼承等原語,為了簡單起見,只支持類之間的單繼承,但支持接口之間的多繼承,并支持類與接口之間的實現機制(關鍵字為implements)。Java語言全面支持動態綁定,而C++語言只對虛函數使用動態綁定。總之,Java語言是一個純粹的面向對象程序設計語言。
- **安全**
Java語言不支持指針,一切對內存的訪問都必須通過對象的實例變量來實現,從而使應用更安全。
- **跨平臺**
用Java語言編寫的程序可以運行在各種平臺上,也就是說同一段程序既可以在Windows操作系統上運行,也可以在Linux操作系統上運行。
- **支持多線程**
Java語言是支持多線程的。所謂多線程可以簡單理解為程序中有多個任務可以并發執行,這樣可以在很大程度上提高程序的執行效率。
## JDK的使用
#### 什么是JDK
SUN 公司提供了一套Java開發環境,簡稱JDK(JavaDevelopmentKit),它是整個Java的核心,其中包括Java編譯器、Java運行工具、Java文檔生成工具、Java打包工具等。
為了滿足用戶日新月異的需求,JDK的版本也在不斷地升級。在1995年,Java誕生之初就提供了最早的版本JDK1.0,隨后相繼推出了JDK1.1、JDK1.2、JDK1.3、JDK1.4、JDK5.0、JDK6.0、JDK7.0、JDK8.0、JDK9.0,本教材針對JDK8.0版本進行講解。SUN 公司除了提供JDK,還提供了一JRE(JavaRuntimeEnvironment)工具,它是Java運行環境,是提供給普通用戶使用的。
由于用戶只需要運行事先編寫好的程序,不需要自己動手編寫程序,因此JRE工具中只包含Java運行工具,不包含Java編譯工具。值得一提的是,為了方便使用,SUN 公司在其JDK 工具中自帶了一個JRE工具,也就是說開發環境中包含運行環境,這樣一來,開發人員只需要在計算機上安裝JDK即可,不需要專門安裝JRE工具了。
#### 安裝JDK
Oracle公司提供了多種操作系統的JDK,每種操作系統的JDK 在使用上基本類似,初學者可以根據自己使用的操作系統,從Oracle官方網站下載相應的JDK 安裝文件。接下來以Windows10系統為例來演示JDK8.0的安裝過程,具體步驟如下。
官網下載地址:[JDK 官網下載](https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html "JDK 官網下載")
勾選 Accept License Agreement

**開始安裝JDK**
雙擊從Oracle官網下載的安裝文件“jdk-8u191-windows-x64.exe”,進入JDK安裝界面,如圖所示。

**2 自定義安裝功能和路徑**
單擊圖中安裝界面的【下一步】按鈕進入JDK 的自定義安裝界面,如圖所示。
在下圖所示界面的左側有三個功能模塊可供選擇,開發人員可以根據自己的需求來選擇所要安裝的模塊,單擊某個模塊,在界面的右側會出現對該模塊功能的說明,具體如下。

- 開發工具:是JDK中的核心功能模塊,其中包含一系列可執行程序,如javac.exe、java.exe等,還包含了一個專用的JRE環境。
- 源代碼:是Java提供公共API類的源代碼。
- 公共JRE:是Java程序的運行環境。由于開發工具中已經包含了一個JRE,因此沒有必要再安裝公共的JRE環境,此項可以不作選擇。
在圖所示的界面右側有一個【更改】按鈕,單擊該按鈕會彈出選擇安裝目錄的界面,如圖所示。通過單擊按鈕進行選擇或直接輸入路徑的方式確定JDK的安裝目錄,在這里采用默認的安裝目錄,因此,該步可以不作選擇,直接單擊【確定】按鈕即可。
**完成JDK 安裝**
在對所有的安裝選項做出選擇后,單擊圖1-2所示界面中的【下一步】按鈕開始安裝JDK。安裝完畢后會進入安裝完成界面,如圖1-4所示。

單擊【關閉】按鈕,關閉當前窗口,完成JDK安裝。
#### JDK目錄介紹
JDK安裝完畢后,會在硬盤上生成一個目錄,該目錄被稱為JDK 安裝目錄,如圖所示。為了更好地學習JDK,初學者必須要對JDK 安裝目錄下各個子目錄的意義和作用有所了解,接下來分別對JDK安裝目錄下的子目錄進行介紹。

- **bin目錄:**該目錄用于存放一些可執行程序,如javac.exe(Java編譯器)、java.exe(Java運行工具)、jar.exe(打包工具)和javadoc.exe(文檔生成工具)等。
- **db目錄:**db目錄是一個小型的數據庫。從JDK6.0開始,Java中引入了一個新的成員JavaDB,這是一個純Java實現、開源的數據庫管理系統。這個數據庫不僅很輕便,而且支持JDBC4.0所有的規范,在學習JDBC時,不再需要額外地安裝一個數據庫軟件,選擇直接使用JavaDB即可。
- **jre目錄:**“jre”是JavaRuntimeEnvironment的縮寫,意為Java程序運行時環境。此目錄是Java運行時環境的根目錄,它包含Java虛擬機,運行時的類包、Java應用啟動器以及一個bin目錄,但不包含開發環境中的開發工具。
- **include目錄:**由于JDK是通過C和C++實現的,因此在啟動時需要引入一些C語言的頭文件,該目錄就是用于存放這些頭文件的。
- **lib目錄:**lib是library的縮寫,意為Java類庫或庫文件,是開發工具使用的歸檔包文件。
- **src.zip文件:**src.zip為src文件夾的壓縮文件,src中放置的是JDK 核心類的源代碼,通過該文件可以查看Java基礎類的源代碼。值得一提的是,在JDK 的bin 目錄下放著很多可執行程序,其中最重要的就是javac.exe和java.exe,接下來分別對這兩個程序進行詳細地講解。

- **javac.exe:**是Java編譯器工具,它可以將編寫好的Java文件編譯成Java字節碼文件(可執行的Java程序)。Java源文件的擴展名為.java,如“HelloWorld.java”。編譯后生成的Java 字節碼文件的擴展名為.class,如“HelloWorld.class”。
- **java.exe:**是Java運行工具,它會啟動一個Java虛擬機(JVM)進程,Java虛擬機相當于一個虛擬的操作系統,它專門負責運行由Java編譯器生成的字節碼文件(.class文件)。
## 第一個Java程序
上一小節通過安裝JDK 搭建好了Java開發環境,下面就來體驗一下如何開發Java程序。為了讓初學者更好地完成第一個Java程序,接下來通過幾個步驟進行逐一講解。
**1 編寫Java源文件**
在JDK安裝目錄的bin目錄下新建文本文檔,重命名為HelloWorld.java。然后用記事本方式打開,編寫一段Java代碼,如例所示。
```java
public class HelloWorld {
public static void main(String[] args) {
System.out.println("這是我的第一個 Java 程序");
}
}
```
例子中的代碼實現了一個Java程序,下面對其中的代碼進行簡單地解釋。
- class是一個關鍵字,它用于定義一個類。在Java中,類就相當于一個程序,所有的代碼都需要在類中書寫。
- HelloWorld是類的名稱,簡稱類名。class關鍵字與類名之間需要用空格、制表符、換行符等任意的空白字符進行分隔。類名之后要寫一對大括號,它定義了當前這個類的管轄范圍,所有的代碼都需要寫在這個大括號中。
- “publicstaticvoidmain(String[]args){}”定義了一個main()方法,該方法是Java程序的執行入口。
- 在main()方法中編寫了一條執行語句“System.out.println("這是我的第一個Java程序!");”,它的作用是打印一段文本信息,執行完這條語句會在命令行窗口中打印“這是第一個Java程序!”。
在編寫程序時,需要特別注意的是,程序中出現的空格、括號、分號等符號必須采用英文半角格式,否則程序會出錯。
**打開命令行窗口**
JDK中提供的大多數可執行文件都在命令行窗口中運行,javac.exe和java.exe兩個可執行命令也不例外。對于不同版本的Windows操作系統,啟動命令行窗口的方式也不盡相同,這里以Windows操作系統為例進行講解。單擊【開始】菜單,在【運行】窗口中輸入“cmd”,快捷鍵是:win + R


**進入JDK 安裝目錄的bin目錄**
要對編寫好的Java程序進行編譯和運行,首先需要進入Java文件所在的目錄,即JDK安裝目錄下的bin目錄。在命令行窗口輸入下面的命令:
```java
cd C:\Program Files\Java\jdk1.8.0_191\bin
```

**編譯Java源文件**
在命令行窗口中輸入“javac HelloWorld.java”命令,對源文件進行編譯。這里產生了一個“編碼GBK的不可映射字符”的錯誤,原因是:JDK是國際版的。修改命令為
```java
javac -encoding UTF-8 HelloWorld.java
```

上面的javac命令執行完畢后,會在bin目錄下生成一個字節碼文件“HelloWorld.class”。

** 運行Java程序**
在命令行窗口中輸入“java HelloWorld”命令,運行編譯好的字節碼文件,運行結果如圖所示。

上面的步驟演示了一個Java程序編寫、編譯以及運行的過程。其中有兩點需要注意:
第一,在使用javac命令進行編譯時,需要輸入完整的文件名,如上例中的程序在編譯時需要輸入“javac HelloWorld.java”;
第二,在使用java命令運行程序時,需要的是類名,而非完整的文件名,如上例中的程序在運行時,只需要輸入“java HelloWorld”就可以了,后面千萬不可加上“.class”,否則程序會報錯。
## 系統環境變量
在計算機操作系統中可以定義一系列變量,這些變量可供操作系統上所有的應用程序使用,被稱作系統環境變量。在學習Java的過程中,需要涉及兩個系統環境變量path和classpath,接下來分別對它們進行講解。
#### path環境變量
path環境變量是系統環境變量中的一種,它用于保存一系列的路徑,每個路徑之間以分號分隔。當在命令行窗口運行一個可執行文件時,操作系統首先會在當前目錄下查找是否存在該文件,如果不存在會繼續在path環境變量中定義的路徑下尋找這個文件,如果仍未找到,系統會報錯。例如,在命令行窗口輸入“javac”命令,并按下回車,會看到錯誤提示,如圖所示。

從圖的錯誤提示可以看出系統沒有找到javac命令。在命令行窗口輸入“set path”命令,可以查看當前系統的path環境變量,如圖所示。

從圖中列出的path環境變量可以看出,其中并沒有包含“javac”命令所在的目錄,因此操作系統找不到該命令。為了解決這個問題,需要給jdk配置環境變量。
依次點擊:我的電腦(此電腦)右鍵 --> 選擇屬性 --> 高級系統設置 --> 環境變量 --> 系統變量 --> 新建


然后找到path變量添加一句命令
```java
%JAVA_HOME%\bin
```

然后通過javac命令測試是否配置成功,以下是配置成功的截圖。

#### classpath環境變量
classpath環境變量也用于保存一系列路徑,它和path環境變量的查看與配置的方式完全相同。當Java虛擬機需要運行一個類時,會在classpath環境變量中所定義的路徑下尋找所需的class文件。
配置classpath環境變量和path的添加方式相同,再次新建一個CLASSPATH環境變量,路徑為JDK的安裝路徑的bin目錄下。然后通過命令“java”測試是否成功。


值得注意的是,在第一個例子中并沒有對classpath 環境變量進行設置,但在“C:\Program Files\Java\jdk1.8.0_191\bin”目錄下仍然可以使用“java”命令正常運行程序,而沒有出現無法找到“Hello World.class”文件的錯誤。這是因為從JDK5.0開始,如果classpath環境變量沒有進行設置,Java虛擬機會自動將其設置為“.”,也就是當前目錄。
## Java的運行機制
使用Java語言進行程序設計時,不僅要了解Java語言的顯著特點,還需要了解Java程序的運行機制。Java程序運行時,必須經過編譯和運行兩個步驟。首先將后綴名為.java的源文件進行編譯,最終生成后綴名為.class的字節碼文件。然后Java虛擬器將字節碼文件進行解釋執行,并將結果顯示出來。為了讓初學者能更好地理解Java程序的運行過程,接下來以第三節第一個java程序為例,進行詳細的分析,具體步驟如下。
1. 編寫一個HelloWorld.java的文件。
2. 使用“JavacHelloWorld.java”命令開啟Java編譯器并進行編譯。編譯結束后,會自動生成一個HelloWorld.class的字節碼文件。
3. 使用“JavaHelloWorld”命令啟動Java虛擬機運行程序,Java虛擬機首先將編譯好的字節碼文件加載到內存,這個過程被稱為類加載,它是由類加載器完成的,然后虛擬機針對加載到內存中的Java類進行解釋執行,便可看到運行結果。
通過上面的分析不難發現,Java程序是由虛擬機負責解釋執行的,而并非操作系統。這樣做的好處是可以實現跨平臺性,也就是說針對不同的操作系統可以編寫相同的程序,只需安裝不同版本的虛擬機即可,如圖所示。

從圖可以看出,不同的操作系統需要使用不同版本的虛擬機,這種方式使得Java語言具有“一次編寫,到處運行(writeonce,runanywhere)”的特性,有效地解決了程序設計語言在不同操作系統編譯時產生不同機器代碼的問題,大大降低了程序開發和維護的成本。
需要注意的是,Java程序通過Java虛擬機可以達到跨平臺特性,但Java虛擬機并不是跨平臺的。也就是說,不同操作系統上的Java虛擬機是不同的,即Windows平臺上的Java虛擬機不能用在Linux平臺上,反之亦然。
## 習題
#### 填空題
1. Java的三個技術平臺分別是( )、( )、( )。
2. Java程序的運行環境簡稱之為( )。
3. 編譯Java程序需要使用命令( )。
4. javac.exe和java.exe兩個可執行程序存放在JDK安裝目錄的( )目錄下。
5. ( )環境變量用來存儲Java的編譯和運行工具所在的路徑,而( )環境變量則用來保存Java虛擬機要運行的“.class”文件路徑。
#### 選擇題
1. 以下選項中,哪些屬于JDK工具? (多選)( )
A.Java編譯器 B.Java運行工具
C.Java文檔生成工具 D.Java打包工具
2. Java屬于以下哪種語言? ( )
A.機器語言 B.匯編語言 C.高級語言 D.以上都不對
3. 下面哪種類型的文件可以在Java虛擬機中運行? ( )
A..java B..jre C..exe D..class
4. 安裝好JDK后,在其bin目錄下有許多exe可執行文件,其中“java.exe”命令的作用是以下哪一種? ( )
A.Java文檔制作工具 B.Java解釋器
C.Java編譯器 D.Java啟動器
5. 如果jdk的安裝路徑為“d:\jdk”,若想在命令窗口中任何當前路徑下,都可以直接使用javac和java命令,需要將環境變量path設置為以下哪個選項? ( )
A.d:\jdk; B.d:\jdk\bin; C.d:\jre\bin; D.d:\jre;
#### 問答題
1. 簡述Java的特點。
2. 簡述JRE與JDK的區別。
#### 編程題
使用記事本編寫一個HelloWorld程序,在dos命令行窗口編譯運行。請按照題目的要求編寫程序并給出運行結果。