官术网_书友最值得收藏!

第1篇 基礎知識

本篇從Java的基本概念及特性開始Java的學習之旅,并通過一些實例來了解Java的實際開發過程。

讀者在學完本篇后將會了解到Java軟件和編程的基本概念,掌握Java的基本操作及應用方法,為后面的學習打好基礎。

第1章 揭開Java的神秘面紗

本章視頻教學錄像:1 小時47 分鐘

通過上一章的閱讀,相信你已經對Java語言有了大概的了解,本章更進一步地介紹如何在Windows和Linux的環境下下載與安裝JDK,并詳細描述Windows下開發環境的配置。最后介紹如何編譯和運行第1個Java程序。

本章要點(已掌握的在方框中打鉤)

□ 掌握下載、安裝Java開發工具箱

□ 掌握開發環境變量的配置

□ 學會編寫第 1個 Java 程序

1.1 Java開發環境

本節視頻教學錄像:2分鐘

學習Java的第一步就是要搭建Java開發環境(Java Development Kit,JDK),它是在操作系統(如Windows、Linux等)下搭建的Java最基本的開發環境,目前由Oracle公司維護開發并免費提供。

JDK由一個處于操作系統層之上開發環境和運行環境組成,如下圖所示。JDK除了包括編譯(javac)、解釋(java)、打包(jar)等工具,還包括開發工具及開發工具的應用程序接口等。當Java程序編譯完畢后,如果想運行,還需要JRE(Java Runtime Environment,Java運行環境)。

JRE是運行JAVA程序所必需的環境的集合,包含JVM標準實現及Java核心類庫。如果僅僅想運行Java程序,安裝JRE就夠了。也就是說,JRE是面向Java程序的使用者的。如果想開發Java程序,就需要安裝JDK,它是面向Java程序的開發者。Java程序的開發者自然也是Java程序的應用者。從下圖也容易看出,JDK包含JRE。

Tools & Tools APIs(工具與工具的應用程序接口)

由上圖可以看出,Java程序開發的第一步就是編寫Java語言的源代碼。而編寫源代碼的工具可以是任何文本編輯器,如Windows 下的記事本、Linux下的Vim均可。這里推薦讀者使用對編程語言支持較好的編輯器:Notepad++、UltraEdit、Editplus等。

Java源文件編寫完畢后,就可以在命令行下通過javac命令將Java源程序編譯成字節碼(二進制文件),然后通過java命令來解釋執行編譯好的Java類文件(文件擴展名為.class)。但如果想正確使用javac和java等命令,用戶必須自己搭建Java開發環境。在1.3節,我們將詳細介紹此步驟。

采用Oracle公司提供的JDK開發Java程序,能夠讓初學者專注于Java語法的理解,代碼模塊之間的關系比較清晰明了,有利于初學者理解Java面向對象的設計思想。此外,JDK的版本也會隨Java (J2EE、J2SE以及J2ME)版本的升級而升級。但它的缺點也是明顯的,從事大規模企業級Java應用開發比較困難,也不利于團體協同開發。

因此,目前市面上出現了很多優秀的Java集成開發環境 (Integrated Development Environment,簡稱 IDE),如NetBeans和Eclipse等。IDE在JDK的基礎上,為程序提供了很多輔助功能的支持,極大方便了程序的開發。在第2章我們將系統地介紹Eclipse的使用。

本節分別介紹兩種應用最為廣泛的操作系統—Windows和Linux環境下安裝JDK的過程。

1.2 安裝Java開發工具箱

Oracle公司提供多種操作系統下的不同版本的JDK。

1.2.1 下載JDK

JDK軟件包的下載方法如下。

⑴ 首先登錄Oracle官方網站下載最新版的JDK版本。在瀏覽器地址欄中輸入www.oracle.com,打開Oracle官方網站,單擊“Downloads(下載)”下載,如下圖所示。

⑵ 如0.3節介紹, Java技術體系可以分為4個平臺:Java SE(Standard Edition,標準版)、Java EE(Enterprise Edition,企業版)、Java ME(Micro Edition,微型版)和Java Card(智能卡版)。后面三個版本都是以Java SE為核心的,所以掌握Java SE最為重要,這也是本書的主要講解范圍。因此,在“Downloads”單擊打開的網頁中選擇下載“Java SE”,如下圖所示。

⑶ 進入正式下載頁面http://www.oracle.com/technetwork/java/javase/downloads/index.html,如下圖所示。

單擊下載“Java Platform (JDK) 8u5”。需要讀者注意的是,雖然我們下載的是Java 8,但Java 8的推廣使用還需要假以時日,Java 7仍然是廣泛應用的開發環境。

借助搜索引擎,如百度(www.baidu.com)或者谷歌(www.google.com.hk),輸入關鍵字諸如“Java 7 下載”等,可以搜索到很多可用的下載地址,或者在下面的官方鏈接地址:http://www.oracle. com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html,也可以選擇下載Java 7的最后更新版本,如下圖所示。

而對于初學者來說,我們主要關注的是Java的基礎知識的學習,在這點上,Java 7和Java 8沒有太明顯的差別。在后續的章節中,如果基礎知識部分涉及Java 8的新特性時,我們會單獨列出說明。

在Java 的發展過程中,其版本編號有一定的“混亂”性,容易讓用戶產生某種程度的困擾。譬如,有的時候讀者朋友(特別是初學者)可能在閱讀一些Java書籍時,發現版本為Java 2,如J2EE。有時又發現一些書籍說自己代碼編譯的平臺是Java 6.0或Java 7.0,那Java 3 或Java 4 去哪里了?因此這里有必要給予解釋一下。下面簡要的介紹一下Java的版本號命名規則。

在Java 1.1之前,其命名方式和傳統的方式一樣。但當Java 1.1升級到Java 1.2時,Sun公司的Java市場推廣部門覺得, Java的內涵發生了很大的變化,應給予Java一個“新”的名稱——Java 2,而它內部的發行編號仍是Java 1.2。當Java內部發行版從1.2過渡到1.3和1.4時,Sun公司對外宣稱的版本依然是Java 2.Sun公司從來沒有發布過Java 3和Java 4。從Java的內部發行版的1.5開始,Java的市場推廣部門又覺得Java已經變化很大,需要給予一個“新”的稱呼來在市場中“博得眼球”,于是Java 1.5 直接對外宣稱Java 5,依此類推,Java 1.6 對外宣稱Java 6,而目前我們即將學到的Java 7,其內部版本是Java 1.7。如下表所示。

為了避免混淆,Oracle公司宣布改變Java版本號命名方式:自JDK 5.0起,Java以兩種方式發布更新。第一種方式是Limited Update(有限更新)模式,其包含新功能和非安全修正。第二種方式是Critical Patch Updates(CPUs,重要補丁更新),只包含安全的重要修正。舉例來說,Java SE 8u5的解釋如下圖所示。

⑷ 由于Oracle的Java實施的是“許可證(License)”,所以需要選擇“ Accept License Agreement(接受許可證協議)”,然后選擇與自己所使用操作系統匹配的SDK版本,如下圖所示。

讀者朋友可以根據自己的操作系統類型以及位數(32位的還是64位的),下載所對應的Java JDK。我們用下表詳細說明上圖所示的各種不同版本JDK的含義。

請注意,對于Linux版本而言,rpm為Red Hat和CentOS為代表的安裝包,假設下載的是32位的rpm安裝包:jdk-8u5-linux-i586.rpm,則其安裝格式為:

rpm -ivh jdk-8u5-linux-i586.rpm

而以tar.gz的軟件包則需要先解壓,假設我們下載的是jdk-8u5-linux-i586.tar.gz,則需要用tar命令先解壓:

tar zxvf jdk-8u5-linux-i586.tar.gz

然后在解壓后的文件夾中查找安裝文件jdk1.8.0_version,這里的version是下載時的次版本號,在不同時期下載,version可能是不同的,因為JDK總是不斷在升級的。

Java 8的JDK軟件包多在100MB以上,下載需要一定的時間,請讀者耐心等待。下面為讀者說明JDK在兩種常用的操作系統——Windows和Linux下的詳細安裝流程。

1.2.2 在Windows 7中安裝JDK

在下載過程中,有個小問題需要讀者注意:如何識別自己所使用的Windows操作系統版本號?在Windows 7下,在桌面上鼠標右鍵單擊“我的電腦”圖標,選擇“屬性”命令,在彈出“屬性”窗口下,如下圖所示,“系統類型”處即可顯示讀者所用的操作系統版本信息。

目前,在筆者寫作本書時, Java的JDK版本號是Java SE 8u5,但編程語言趨勢是一直向上升級,只要大版本“8”不變,“u”后面的小版本號有所變化,基本上不會影響普通用戶的學習。

安裝環境介紹。

操作系統:64位Windows 7

安裝軟件:jdk-8u5-windows-x64.exe

⑴ 開始安裝,下載完成后,就可以安裝Java JDK。雙擊“jdk-8u5-windows-x64.exe”,具體流程如下圖所示。

⑵ 選擇安裝路徑,確定是否安裝公共JRE。公共JRE提供了一個Java運行環境。JDK默認自帶了JRE??蓡螕簟救∠堪粹o,選擇不安裝公共JRE,并不會對Java運行造成影響。如下圖所示。

⑶ 單擊【Next】按鈕,正在安裝JDK,如圖所示。

⑷ 安裝公共JRE,如果在上一步中沒有取消安裝公共JRE,在安裝JRE過程中會提示安裝公共JRE??梢栽诒静襟E中單擊取消,不安裝公共JRE。或者單擊下一步按鈕,安裝公共JRE。

⑸ 正在安裝公共JRE。

⑹ JDK安裝完成。

⑺ 查看安裝目錄(C:\Program Files\Java)。如果安裝了公共JRE,會在本目錄下出現公共JRE安裝后的目錄(如下圖所示),否則則沒有。

⑻ 查看JDK安裝目錄(C:\Program Files\Java\jdk1.8.0_05)。JDK默認安裝了JRE,提供了Java程序運行時默認環境,運行時并不使用公共JRE。

1.2.3 在Red Hat Enterprise Linux中安裝JDK

Windows是Java程序員應用廣泛的操作系統,但是Linux操作系統在服務器領域(如Red Hat)占據重要地位,其桌面系統(如Ubuntu)的市場份額也日益擴大。所以,學有余力的讀者可以在Linux平臺下開展Java程序開發。因此也有必要介紹一下Linux下安裝JDK的流程。

在Linux環境下,在安裝Java JDK之前,首先要下載正確的JDK軟件包。下載的方式和Windows環境下的流程基本一致。但在判定用戶所使用的操作系統版本上,是有所不同的。

筆者使用的Linux操作系統為Red Hat Enterprise Linux (RHEL) 6.5。下面在終端演示的幾條命令,是下載JDK之前需要了解的操作系統信息。

⑴ 查詢Linux操作系統是32位還是64位。使用命令getconf LONG_BIT或getconf WORD_BIT,如下圖所示。

如果顯示32則說明是Linux32位操作系統。類似的,如果顯示為64,則說明Linux為64位操作系統,其中root是Linux的根用戶(類似于Windows的超級管理員)。下面我們還可以用file命令來顯示Linux的版本號。

⑵ 使用file /bin/ls顯示Linux的版本號,如下圖所示。

如果輸出有32-bit字樣,則說明是Linux 是32位操作系統。類似的,如果含有64-bit字樣,則說明為Linux 是64位操作系統。

⑶ 查詢Linux的發行版本。

在命令行模式下,輸入 lsb_release -a ,即可列出所有版本信息,如下圖所示。

上面輸出說明當前的Linux操作系統為Red Hat Enterprise Linux Server release 6.5。根據上面的操作系統版本信息,我們選擇單擊下載32位的JDK:“jdk-8u5-linux-i586.rpm”,如下圖所示。

安裝環境介紹。

操作系統:Red Hat Enterprise Linux Server release 6.5 32位。

安裝軟件:jdk-8u5-linux-i586.rpm。

提示

RPM是RedHat Package Manager(RedHat軟件包管理工具)類似于Windows操作系統下的“添加/刪除程序”。二進制包可以直接安裝在計算機中,而源代碼包將會由RPM自動編譯、安裝,這樣更加方便用戶使用。

⑴ 將安裝包下載至用戶家目錄(home)下的文件夾Downloads。

我們用pwd命令顯示當前的工作目錄,用ls -l 命令顯示當前的工作目錄下的文件列表,jdk-8u5-linux-i586.rpm就是我們要安裝的文件,如下圖所示。

⑵ 查詢系統是否安裝JDK。

使用rpm -qa | grep jdk 命令查看當前系統是否已安裝了JDK;使用java -version 命令查看當前使用的JDK版本,如下圖所示。

上圖顯示,我們的系統中并沒有安裝Java。如果安裝了舊版本的,則需要先卸載舊版本。使用:

rpm -e --nodeps 【軟件包名】

卸載指定的軟件包。卸載完成后使用:

which java

命令確認JDK已完全卸載。

⑶ 安裝Java 8 的JDK。

使用如下命令:

rpm -ivh jdk-8u5-linux-i586.rpm

安裝JDK,如下圖所示。其中rpm是安裝命令,而-ivh是安裝參數,具體含義讀者可以用“man rpm”參考,這里不再贅述。

⑷ 測試JDK是否安裝成功。

使用“java -version”來檢測Java的版本號,如果檢測到版本號,就間接說明安裝成功。用“which java”來檢測Java的安裝路徑,如下圖所示。

需要讀者注意的是,在Linux中,是區分大小寫的。在bash命令行模式下,要使用小寫的“java”,而非“Java”。

對于其他Linux發行版(如Ubuntu等),由于系統配置不同,安裝JDK情況也可能不同,在安裝完成JDK后還需要配置相關的環境變量,下面我們來說明Linux。

1.2.4 在Ubuntu操作系統中安裝JDK

下面我們介紹如何在Ubuntu操作系統上安裝JDK 8,這是Linux環境下最便捷的方法。

安裝環境介紹。

操作系統:Ubuntu 14.04 LTS 32位

安裝軟件:jdk-8u5-linux-i586.tar.gz

Ubuntu 系統安裝Java 8最簡單的方式是通過Ubuntu的PPA( Personal Package Archives,個人軟件包倉庫)安裝。PPA是專為Ubuntu 用戶設計的軟件倉庫,類似于Windows下的奇虎公司的360軟件管家。

⑴ 打開終端(快捷鍵Ctrl+Alt+t),在Ubuntu中添加PPA。

輸入命令:sudo add-apt-repository ppa:webupd8team/java

⑵ 更新軟件列表。

輸入命令:sudo apt-get update

等待軟件列表更新完成,如下圖所示。

⑶ 安裝 JDK 8。

輸入命令:sudo apt-get install oracle-java8-installer。

①安裝oracle-java8-installer會暫用部分硬盤空間,系統問是否繼續,輸入y,繼續。

②oracle-java8-installer提示注意Oracle公司的Java SE的許可證協議,按回車鍵確認。

③選擇接受許可證協議,用Tab鍵切換值<YES>處,按回車鍵確認。

④下載安裝jdk-8u5-linux-i586.tar.gz,由于該文件較大,需要耐心等待一會。

⑷ 測試是否安裝成功。

待上述安裝流程完畢后,輸入命令。

      java -version

檢測Java的版本號碼,間接驗證Java是否安裝成功(需要注意的是,在Linux中,有關Java的命令都是小寫的java,否則會出錯)。

從提示中,可以看出java 1.8.0_05安裝成功。

如果原來已經安裝有Java 7,想要設置 Java 8 為默認的編譯環境,則需在終端輸入下面的命令:

      sudo apt-get install oracle-java8-set-default

如果工作需要,想將編譯環境切換為 Java 7,在終端輸入下面的命令:

      sudo update-java-alternatives -s java-7-oracle

類似,如果重新切換為 Java 8,在終端輸入下面的命令:

      sudo update-java-alternatives -s java-8-oracle

1.3 磨刀不誤砍柴工——環境變量的配置

本節視頻教學錄像:44分鐘

環境變量的配置主要包括了解環境變量和具體配置過程等。

1.3.1 理解環境變量

本書主要以Windows 7為操作系統載體來講解Java。而在開發Java程序之前,通常需要先在Windows操作系統中配置好有關Java的系統環境變量(Environment Variable)。

在介紹環境變量的含義之前,我們先舉一個形象的例子,給讀者一個感性的認識。比如我們喊一句:“張三,你媽媽喊你回家吃飯!”可是“張三”為何人?他在哪里呢?對于我們人來說,認不認識“張三”都能給出一定的響應,如認識他,可能就會給他帶個話;而不認識他,也可能幫忙吆喝一聲“張三,快點回家吧!”

然而,對于操作系統來說,假設“張三”代表的是一條命令,它不認識“張三”是誰,也不知道“它”來自何處,它會“毫無情趣”的說,我“不認識“張三”: “not recognized as an internal or external command,然后拒絕繼續服務。

為了讓操作系統“認識”張三,我們必須給操作系統有關張三的精確信息,如“XXX省YYY縣ZZZ鄉QQQ村張三”,但其他的問題又來了,如果“張三”所代表的命令是用戶經常用到的,每次使用“張三”,用戶都在終端敲入“XXX省YYY縣ZZZ鄉QQQ村張三”,這是非常繁瑣的,能不能有簡略的辦法呢?聰明的系統設計人員想出了一個簡易的策略——環境變量。把“XXX省YYY縣ZZZ鄉QQQ村”設置為常見的“環境”,當用戶在終端僅僅敲入“張三”時,系統自動檢測環境變量集合里有沒有“張三這個人,如果在”“XXX省YYY縣ZZZ鄉QQQ村”找到了,就自動替換為一個精確的地址“XXX省YYY縣ZZZ鄉QQQ村張三”,然后繼續為用戶服務。如果整個環境變量集合里都沒有“張三”,那么再拒絕服務,如下圖所示。

操作系統里沒有上/下行政級別的概念,但卻有父/子文件夾的概念,二者有“曲藝同工”之處。對“XXX省YYY縣ZZZ鄉QQQ村”這條定位“路徑”,操作可以用“/”來區分不同級別文件夾,即:”“XXX省/YYY縣/ZZZ鄉/QQQ村””,而“張三”就像這個文件夾下的命令文件。

下面我們給出環境變量的正式定義。

環境變量是指在操作系統指定的運行環境中的一組參數,它包含一個或多個應用程序使用的信息。環境變量一般是多值的,即一個環境變量可以有多個值,各個值之間以英文狀態下的分號“;”(即半角的分號)分隔開來。

對于Windows等操作系統來說,一般都有一個系統級的環境變量Path(路徑)。當用戶要求操作系統運行一個應用程序,卻沒有指定應用程序的完整路徑時,操作系統首先會在當前路徑下尋找該應用程序,如果找不到,便會到環境變量路徑“Path”指定的路徑下尋找。若找到該應用程序則執行它,否則會給出錯誤提示。用戶可以通過設置環境變量來指定自己想要運行的程序的所在位置。

例如,編譯Java程序需要用到javac命令,運行Java程序需要java命令。而這兩個命令并不是Windows系統自帶的命令,所以用戶需要通過設置環境變量(JDK的安裝位置)來指定這兩個命令的位置。設置完成后就可以在任意目錄下使用這兩個命令了,而無需每次都要輸入這兩個命令的所在的精確全路徑(如C:\Program Files\Java\jdk1.8.0_05)。javac和java等命令都放在JDK安裝目錄的bin目錄下?;陬愃朴诃h境變量“Path”相同的理由,我們需要掌握JDK中最重要的3個環境變量,下面一一給予介紹。

1.3.2 配置JDK中的3個環境變量

對于環境變量中相關變量的深刻理解極為重要,特別是ClassPath,在日后的Java學習開發過程中會發現,很多問題的出現都與ClassPath環境變量有關。在學習如何配置這些環境變量之前,很有必要深刻理解下面3個環境變量代表的含義。

⑴ JAVA_HOME:顧名思義,”JAVA的家“——該變量是指安裝Java的JDK路徑,它告知操作系統在哪里可以找到JDK。

⑵ Path:前文已經有所介紹。該變量是告訴操作系統可執行文件的搜索路徑,即可以在哪些路徑下找到要執行的可執行文件,請注意它僅對可執行文件有效。當運行一個可執行文件時,用戶僅僅給出該文件名,操作系統首先會在當前目錄下搜索該文件,若找到則運行它,若找不到該文件,則根據Path變量所設置的路徑,逐條到Path目錄中搜索該可執行文件。

⑶ ClassPath:該變量是用來告訴Java解釋器(即java命令)在哪些目錄下可找到所需要執行的class文件(即javac編譯生成的字節碼文件)。

對于初學者來說,Java的運行環境的配置比較麻煩,請讀者按照以下介紹實施配置。

1. JAVA_HOME的配置

下面我們詳細說明Java的環境變量配置流程。

⑴ 在桌面中右擊【我的電腦】,在彈出的快捷菜單中選擇【屬性】選項,如下圖所示。

⑵ 在彈出的界面左上方,選擇【高級系統設置】選項,如下圖所示。

⑶ 單擊【高級系統設置】選項后彈出【系統屬性】對話框,然后單擊【高級】->【環境變量】,如下圖所示。

⑷ 在【環境變量】對話框中,單擊【系統變量】下的【新建】按鈕,顯示如下圖所示。

⑸ 在【編輯系統變量】對話框中輸入,變量名為:“JAVA_HOME”,變量值為:C:\Program Files\Java\jdk1.8.0_05。特別需要讀者注意的是,這個路徑的具體值是根據讀者安裝JDK的路徑而定,讀者把Java安裝在哪里,就把對應的安裝路徑放置于環境變量之內,不可拘泥于本書演示的這個路徑值。然后,單擊【確定】按鈕,如下圖所示。

注意

假設JDK安裝在“C:\Program Files\Java\jdk1.8.0_05”,在設置完畢對應的環境變量JAVA_HOME后,以后再要用到這個變量時,需用兩個%將其包括起來。如要設置另外一個環境變量值為“C:\Program Files\Java\jdk1.8.0_05\bin”,那么我們可以簡單的用“%JAVA_HOME%\bin”代替即可。

2. Path的配置

⑴ 選中系統環境變量中的Path,單擊【編輯】按鈕,如下圖所示。

⑵ 在彈出的【編輯系統變量】對話框的【變量值】文本框中,在文本框的末尾添加:“;%JAVA_HOME%\bin”,特別注意不要忘了前面的分號“;”,然后單擊【確定】按鈕,返回【系統屬性】對話框,如下圖所示。這里的%JAVA_HOME%就是指代前面設置的“C:\Program Files\Java\jdk1.8.0_05”,這里主要是為了方便起見,避免每次引用這個路徑都輸入很長的字符串。如果不怕麻煩,“;%JAVA_HOME%\bin”完全可以用全路徑“;C:\Program Files\Java\jdk1.8.0_05\bin”代替之。這個路徑務必設置正確,因為諸如Java語言的編譯命令javac和解釋命令java等都是在這個路徑下,設置失敗,這些命令將無法找到。注意:Path路徑都是系統路徑,配置的過程中要小心,以防無意刪掉,最好先備份到文檔中。

注意

當Path有多個變量值時,一定要用半角(即英文輸入法)下的“;”將多個變量值區分開。初學者很容易犯錯的地方:(1)忘記在上一個Path路徑值前面添加分號“;”(2)沒有切換至英文輸入法,誤輸入中文的分號“;”。英文分號是1個字節大小,而中文的分號是2個字節大小。

⑶ 在【系統屬性】對話框中單擊【確定】按鈕,完成環境變量的設置,如下圖所示。

請注意,檢測環境變量是否配置成功,在命令行模式下,在任意目錄下用javac命令來檢驗,如果能輸出javac的用法提示,則說明配置成功,如下圖所示。

進入命令行模式的方法是,單擊Windows 7的【開始】菜單,在搜索框中輸入CMD命令,然后回車即可。

3. ClassPath的指定

ClassPath的設定對初學者來說,有一定的難度,容易配錯。如果說JAVA_HOME指定的是java命令的運行路徑的話,那么ClassPath指定的就是java加載類的路徑,只有類在ClassPath中,java命令才能找到它,并解釋它。

在Java中可以使用“set classpath”命令指定Java類的執行路徑。下面通過一個例子來了解一下classpath的作用,假設這里的“Hello.class”類位于“C:\”目錄下。

在“D:\”目錄下的命令行窗口執行下面的指令。

        set classpath=c:

之后在“D:\”目錄下執行“java Hello”命令,如下圖所示。

從上圖所示的輸出結果可以發現,雖然在“D:\”目錄中并沒有“Hello.class”文件,但是也可以用“java Hello”執行“Hello.class”文件。之所以會有這種結果,就是因為在“D:\”目錄中使用了“set classpath”命令,它把類的查找路徑指向了“C:\”目錄,在運行java時,會從ClassPath 中查找這個Hello類文件,而ClassPath 中包括了“C:\”,所以運行成功。

注意

在設置classpath時,最好將classpath指向當前目錄,即所有的class文件都從當前文件夾中開始查找:“set classpath=.”。在命令行輸入命令時,不包括上面的引號“ ”。在Windows及Linux等操作系統下,一個點“.”代表當前目錄,兩個點“..”代表上一級目錄。

但是這樣的操作行命令操作模式,實際上又會造成一種局限:每一次啟動命令行窗口所設置的ClassPath都只是針對于當前命令行窗口有效。一旦重新開啟命令行窗口,或系統重啟,命令行臨時設置的ClassPath中變量值都丟失了。如果想“一勞永逸”,最好的辦法還是將ClassPath設置為環境變量。

⑴ 參照上一節中JAVA_HOME的配置,在【環境變量】對話框中,單擊【系統變量】下的【新建】按鈕,如下圖所示。新建一個環境變量,變量名為:CLASSPATH,變量值為:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar。注意不要忽略了前面的 "." ,這里的小點“.”代表的是當前路徑,既然是路徑,自然也需要用分號“;”隔開。JDK的庫所在包即tools.jar,所以也要設置進ClassPath中。

注意

Windows系統環境下,一般只要設置好JAVA_HOME就可以正常運行Java程序。默認的ClassPath是當前路徑(即一個點 “.”)。有些第三方的開發包,需要使用到環境變量ClassPath,只有這樣才能夠使用JDK的各種工具。Windows下不區分大小寫,ClassPath和CLASSPATH是等同的,可根據讀者習慣自己選擇大小寫

⑵ 在按照步驟⑴設置后,如果在Java類(即.class)文件所存儲的當前路徑下,那么用“java+類名”方式解釋執行用戶類文件,這是沒有問題的。但是如果用戶更換了路徑,現在的“當前路徑”里沒有在.class文件,那么“java”就無法找到這個類文件。

這時,即使在命令行下給出.class文件所在的全路徑,java依然會出錯,這會讓初學者很困惑。下面具體說明,假設Java文件Hello.java存在在“D:\src\chap01\”路徑下,由于JAVA_HOME和Path環境變量正確,用戶可以正確編譯、運行,使用javac和java命令無誤,如下圖所示。

但是如果用戶切換了路徑,比如使用“cd”命令切換至“D:\src\”,再次用java運行Hello類文件,就會得到錯誤信息:“Error: Could not find or load main class TestJava2_1”,如下圖所示。這是因為Java在ClassPath里找不到Hello.class,因為現在的這個當前路徑(也就是那個“.”代表的含義)已經變更為“D:\src\”,而“D:\src\”路徑下確實沒有Hello.class這個文件。

所以如果想在任意路徑下執行用戶的類文件,就必須把用戶自己編譯出的類文件所在路徑,這里指的是“D:\src\chap01”,也加入到ClassPath中,并用分號“;”與前一個變量隔開,如下圖所示。

⑶ 最后,參照環境變量Path的配置,將環境變量CLASSPATH添加到Path的最后,如下圖所示。CLASSPATH是環境變量,在另外一個地方作為變量使用時,要用兩個%將該變量前后包括起來。

如果用戶原來的命令行終端窗口一直開啟著,則需要關閉再重啟命令行窗口,這是因為需要重新更新命令行窗口的環境變量。之后,就可以在任意路徑下執行用戶自己的類文件,如下圖所示。

1.4 享受安裝成果——開發第1個Java程序

本節視頻教學錄像:18分鐘

現在就自己來動手編寫一個Java的程序,親自感受一下Java語言的基本形式。需要說明的是, Java程序分為兩種形式:一種是網頁上使用的Applet程序(Java小程序),該程序可以嵌入在 HTML(標準通用標記語言的一個應用)頁中。另一種是Application程序(即Java應用程序),本書主要講解的是Java應用程序。下面就以Java應用程序為例,開始我們第1個Java程序。

【范例1-1】 編寫Hello.java程序。

        01 public class Hello
        02 {
        03   //main是程序的起點,所有程序由此開始運行
        04   public static void main(String args[])
        05   {
        06     //下面語句表示向屏幕上打印輸出“Hello World!”字符串
        07     System.out.println("Hello World!");
        08   }
        09 }

【運行結果】

將上面的程序保存為“Hello.java”文件。行號是為了讓程序便于被讀者(或程序員)理解而人為添加的,真正Java源代碼是不需要這些行號的。在命令行中輸入“javac Hello.java”,沒有錯誤后輸入“java Hello”。運行結果如下圖所示,顯示“Hello World!”。

Java程序運行的流程可用如右圖來說明:所有的Java源代碼(以.java為擴展名),通過Java編譯器javac (javac命令中字母c來自于compiler的首字母)編譯成字節碼,也就是以.class為擴展名的文件。然后利用命令java將對應的字節碼通過Java虛擬機(JVM)解釋為特定操作系統(如Windows、Linux等)能理解的機器碼,最終Java程序得以執行。

這里需要注意的是,此處的java命令在Windows操作系統下,不區分大小寫,諸如java 和JavA都是等同的。而在Linux等類UNIX系統下,由于區分大小寫,javac和java命令等的所有命令字符都必須小寫。

上面的程序如果暫時不明白也沒有關系,讀者只要將程序在任意純文本編輯器(如Windows下的記事本、Notepad++、Linux下的vim等均可)里敲出來,然后按照步驟編譯、執行就可以了。這里只是讓讀者對Java Application程序有一個初步印象,因為以后所有的內容都將圍繞Java Application程序進行。

下面我們來解讀一下這個Java小程序,讓讀者對Java程序有個初步的認知。更為詳細的知識點讀者可以參考后續相關章節進行學習。

第1行。public 是一個關鍵字,用于聲明類的權限,表明這是一個公有類(class),其他任何類都可以直接訪問它。class 也是Java的一個關鍵字,用于類的聲明,其后緊跟的就是類名,這里的類名稱是Hello。

第2行和第9行。這一對大括號{}標明了類的區域,在這個區域內的所有內容都是類的一部分。

第3行和第6行。這兩行為注釋行,可以提高程序的可讀性。注釋部分不會被執行。這種注釋屬于單行注釋,要求以雙斜線//開頭,后面的部分均為注釋。

第4行。這是一個main方法,它是整個Java程序的入口,所有的程序都是從public static void main(String args[])開始運行的,該行的代碼格式是固定的。String args[]不能漏掉,如果漏掉,在一些編輯器中,如Eclipse,該類不能被識別執行。另外String args[]也可以寫成String [] args,String為參數類型,表示為字符串型,args是arguments(參數)的縮寫。public 和static都是Java的關鍵詞,它們一起表明main是公有的靜態方法。void也是Java的關鍵詞,表明該方法沒有返回值。對于這些關鍵詞,讀者可以暫時不用深究,在后面的章節中會詳細講解main方法的各個組成部分。

第5行和第8行是main方法的開始和結束標志,它們聲明了該方法的區域,在{}之內的語句都屬于main方法。

第7行System.out.println是Java內部的一條輸出語句。引號內部的內容"Hello World !"會在控制臺中打印出來。

1.5 探秘Java虛擬機(JVM)

本節視頻教學錄像:10分鐘

在上一個小節中,我們看到Java編譯器——javac僅僅將源代碼編譯成.class文件,然后通過命令java將.class文件送往Java虛擬機(JVM),變成最終可執行的程序。下面我們就Java虛擬機的機制進行簡單的討論。

Java中的虛擬機的概念,可以看作是在機器和編譯程序之間加入了一層抽象的虛擬機器。這臺虛擬的機器在任何平臺上都提供給編譯程序一個共同的接口。編譯程序只需要面向虛擬機,生成虛擬機能夠理解的代碼,然后由解釋器來將虛擬機代碼轉換為特定系統的機器碼執行。在Java中,這種供虛擬機理解的代碼叫做字節碼(ByteCode),它不面向任何特定的處理器,只面向虛擬機。每一種平臺的解釋器是不同的,但是實現的虛擬機卻是相同的。

Java程序得以執行的環境稱之為Java運行時環境(Java Runtime Environment, 簡稱JRE),它由Java的虛擬機JVM和Java 的API構成。一個Java程序若想運行在Java虛擬機之中,源代碼的語句需由Java編譯器編譯成字節碼。字節碼本質上是一種標準化的可移植的二進制格式。該格式以Java類文件(.class)的形式存在。一個Java程序可有多個不同的.class文件構成。在早期發布大型的Java程序,通常把多個.class文件打包成一個發布文件.jar ,其擴展名來自于“java archive”(java 歸檔文件)的簡寫。

Java虛擬機在執行.class或jar文件時,使用到“即時編譯器”(JIT compiler,just-in-time compiler)?!凹磿r編譯器”是一個把Java的字節碼(包括需要被解釋的指令的程序)轉換成可以直接發送給處理器(processor)指令的程序。本質上,“即時編譯器”是Java程序的第二個編譯器,它能把通用的字節碼編譯成特定系統的機器指令代碼。但是這里的二次編譯,對用戶來說基本上是“透明的”—即它存在但用戶無需感知。

值得一提的是,另外一種網絡編程常見語言—Python,也可以通過jpython(Python的純java實現版本)編譯后,同樣也生成Java編譯生成一樣的字節碼,從而也大大提供了該類程序的可移植性。但python不在本書討論的范圍。

1.6 高手點撥

本節視頻教學錄像:5分鐘

1. 注意Java相對C++的一些特性

由于Java語言的設計者十分熟悉C++語言,所以在設計時很好地借鑒了C++語言??梢哉f, Java語言是比C++語言“更加面向對象”的一種編程語言。Java語言的語法結構與C++語言的語法結構十分相似,這使得C++程序員學習Java語言更加容易。

如果讀者是從C++過渡而來的Java學習者,那么下面幾個特性值得讀者注意。

⑴ 提供了對內存的自動垃圾回收(Garbage Collection),程序員無需在程序中進行分配、釋放內存,那些可怕的內存分配錯誤不會再打擾設計者了。

⑵ 去除了C++語言中容易出錯的“指針”,而是用諸如“引用(reference)”的方法來取而代之。避免了賦值語句(如a = 3)與邏輯運算語句(如a = = 3)的混淆。

⑶ 取消了多重繼承這一復雜的概念。多重繼承會導致類中數據成員的“二義性”等問題,從而使得類的訪問結構非常復雜。

2. 重視Java官網的文檔

Java 7的語言規范(The Java? Language Specification Java SE 7 Edition)是公開的,可在Oracle的官方網站上下載(http://docs.oracle.com/javase/specs/jls/se7/jls7.pdf)。閱讀Java語言的規范是提高技術水平的好方法。

3. 如何在命令行模式下正確運行Java類文件

使用javac編譯java源代碼生成對應的.class文件,比如,范例1-1所示的Hello.class,然后用java來運行這個類文件,初學者很容易犯錯,最有可能得到如下錯誤信息。

        Error: Could not find or load main class Hello.class

產生這種錯誤的原因通常有兩個。

⑴ Java環境變量JAVA_HOME及ClassPath設置不正確,在設置環境變量時,在前一個環境變量前一定要用分號“;”以此區分不同的環境變量。同時要把當前目錄“.”放進環境變量中。這里的一個小點“.”代表的就是class類文件所在的當前目錄。

⑵ 有可能初學者在命令行模式下按如下方式來運行這個類文件。

        java Hello.class

而正確的方式為:

        java Hello

也就是說,java操作的對象雖然是類文件,但是卻無需類文件的擴展名.class。

4. 正確保存Java的文件名

對于包括public類名的Java源程序,在保存時,初學者需要注意該源程序的名稱需要和public類名稱保持完全一致,如下所示的一個類。

        public class Hello

這個公有類名名稱為Hello,那么這個類所在的源文件必須保存為Hello.java,由于Java語言是區分大小寫的,保存的Java文件名(除了擴展名.java)必須和公有類的名稱一致,包括大小寫也一致。例如,如果公有類的名稱為HEllo,而文件保存為Hello.java,雖然二者僅有一個字符“E”的在大小寫上有差異,但依然無法通過編譯,會得到如下錯誤。

        error: class HEllo is public, should be declared in a file named HEllo.java
        public class Hello
        1 error

上述錯誤信息的第一句就是提示包含公有類HEllo的文件,應保存的文件名為HEllo.java,而不是目前保存的Hello.java。

需要注意的是,對于沒有包括public類的源文件,源文件的名稱和非public類的名稱可以不相同。

1.7 實戰練習

本節視頻教學錄像:15分鐘

編寫一個Java程序,運行后在控制臺中輸出“不拋棄,不放棄。Java, I am coming!”。

主站蜘蛛池模板: 墨玉县| 休宁县| 安图县| 海安县| 新密市| 威远县| 新乡县| 泸西县| 萨迦县| 常德市| 斗六市| 南丰县| 马边| 舟曲县| 东丰县| 南岸区| 合江县| 启东市| 无为县| 丰城市| 阆中市| 云南省| 沂水县| 奉新县| 太仓市| 土默特右旗| 黄山市| 龙口市| 新沂市| 长海县| 南召县| 安塞县| 克什克腾旗| 临西县| 突泉县| 岐山县| 明光市| 会理县| 右玉县| 宜都市| 衡阳县|