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

  • Java從入門到精通(第2版)
  • 龍馬高新教育策劃 魔樂科技(MLDN)軟件實訓(xùn)中心編著 張玉宏主編
  • 746字
  • 2019-01-02 04:58:34

第1篇 基礎(chǔ)知識

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

讀者在學(xué)完本篇后將會了解到Java軟件和編程的基本概念,掌握J(rèn)ava的基本操作及應(yīng)用方法,為后面的學(xué)習(xí)打好基礎(chǔ)。

第1章 揭開Java的神秘面紗

本章視頻教學(xué)錄像:1 小時47 分鐘

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

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

□ 掌握下載、安裝Java開發(fā)工具箱

□ 掌握開發(fā)環(huán)境變量的配置

□ 學(xué)會編寫第 1個 Java 程序

1.1 Java開發(fā)環(huán)境

本節(jié)視頻教學(xué)錄像:2分鐘

學(xué)習(xí)Java的第一步就是要搭建Java開發(fā)環(huán)境(Java Development Kit,JDK),它是在操作系統(tǒng)(如Windows、Linux等)下搭建的Java最基本的開發(fā)環(huán)境,目前由Oracle公司維護(hù)開發(fā)并免費提供。

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

JRE是運行JAVA程序所必需的環(huán)境的集合,包含JVM標(biāo)準(zhǔn)實現(xiàn)及Java核心類庫。如果僅僅想運行Java程序,安裝JRE就夠了。也就是說,JRE是面向Java程序的使用者的。如果想開發(fā)Java程序,就需要安裝JDK,它是面向Java程序的開發(fā)者。Java程序的開發(fā)者自然也是Java程序的應(yīng)用者。從下圖也容易看出,JDK包含JRE。

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

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

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

采用Oracle公司提供的JDK開發(fā)Java程序,能夠讓初學(xué)者專注于Java語法的理解,代碼模塊之間的關(guān)系比較清晰明了,有利于初學(xué)者理解Java面向?qū)ο蟮脑O(shè)計思想。此外,JDK的版本也會隨Java (J2EE、J2SE以及J2ME)版本的升級而升級。但它的缺點也是明顯的,從事大規(guī)模企業(yè)級Java應(yīng)用開發(fā)比較困難,也不利于團(tuán)體協(xié)同開發(fā)。

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

本節(jié)分別介紹兩種應(yīng)用最為廣泛的操作系統(tǒng)—Windows和Linux環(huán)境下安裝JDK的過程。

1.2 安裝Java開發(fā)工具箱

Oracle公司提供多種操作系統(tǒng)下的不同版本的JDK。

1.2.1 下載JDK

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

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

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

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

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

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

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

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

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

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

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

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

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

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

而以tar.gz的軟件包則需要先解壓,假設(shè)我們下載的是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在兩種常用的操作系統(tǒng)——Windows和Linux下的詳細(xì)安裝流程。

1.2.2 在Windows 7中安裝JDK

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

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

安裝環(huán)境介紹。

操作系統(tǒng):64位Windows 7

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

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

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

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

⑷ 安裝公共JRE,如果在上一步中沒有取消安裝公共JRE,在安裝JRE過程中會提示安裝公共JRE??梢栽诒静襟E中單擊取消,不安裝公共JRE?;蛘邌螕粝乱徊桨粹o,安裝公共JRE。

⑸ 正在安裝公共JRE。

⑹ JDK安裝完成。

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

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

1.2.3 在Red Hat Enterprise Linux中安裝JDK

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

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

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

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

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

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

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

⑶ 查詢Linux的發(fā)行版本。

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

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

安裝環(huán)境介紹。

操作系統(tǒng):Red Hat Enterprise Linux Server release 6.5 32位。

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

提示

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

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

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

⑵ 查詢系統(tǒng)是否安裝JDK。

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

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

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

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

which java

命令確認(rèn)JDK已完全卸載。

⑶ 安裝Java 8 的JDK。

使用如下命令:

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

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

⑷ 測試JDK是否安裝成功。

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

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

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

1.2.4 在Ubuntu操作系統(tǒng)中安裝JDK

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

安裝環(huán)境介紹。

操作系統(tǒng):Ubuntu 14.04 LTS 32位

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

Ubuntu 系統(tǒng)安裝Java 8最簡單的方式是通過Ubuntu的PPA( Personal Package Archives,個人軟件包倉庫)安裝。PPA是專為Ubuntu 用戶設(shè)計的軟件倉庫,類似于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會暫用部分硬盤空間,系統(tǒng)問是否繼續(xù),輸入y,繼續(xù)。

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

③選擇接受許可證協(xié)議,用Tab鍵切換值<YES>處,按回車鍵確認(rèn)。

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

⑷ 測試是否安裝成功。

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

      java -version

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

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

如果原來已經(jīng)安裝有Java 7,想要設(shè)置 Java 8 為默認(rèn)的編譯環(huán)境,則需在終端輸入下面的命令:

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

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

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

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

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

1.3 磨刀不誤砍柴工——環(huán)境變量的配置

本節(jié)視頻教學(xué)錄像:44分鐘

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

1.3.1 理解環(huán)境變量

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

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

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

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

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

下面我們給出環(huán)境變量的正式定義。

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

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

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

1.3.2 配置JDK中的3個環(huán)境變量

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

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

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

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

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

1. JAVA_HOME的配置

下面我們詳細(xì)說明Java的環(huán)境變量配置流程。

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

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

⑶ 單擊【高級系統(tǒng)設(shè)置】選項后彈出【系統(tǒng)屬性】對話框,然后單擊【高級】->【環(huán)境變量】,如下圖所示。

⑷ 在【環(huán)境變量】對話框中,單擊【系統(tǒng)變量】下的【新建】按鈕,顯示如下圖所示。

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

注意

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

2. Path的配置

⑴ 選中系統(tǒng)環(huán)境變量中的Path,單擊【編輯】按鈕,如下圖所示。

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

注意

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

⑶ 在【系統(tǒng)屬性】對話框中單擊【確定】按鈕,完成環(huán)境變量的設(shè)置,如下圖所示。

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

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

3. ClassPath的指定

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

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

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

        set classpath=c:

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

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

注意

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

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

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

注意

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

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

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

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

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

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

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

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

本節(jié)視頻教學(xué)錄像:18分鐘

現(xiàn)在就自己來動手編寫一個Java的程序,親自感受一下Java語言的基本形式。需要說明的是, Java程序分為兩種形式:一種是網(wǎng)頁上使用的Applet程序(Java小程序),該程序可以嵌入在 HTML(標(biāo)準(zhǔn)通用標(biāo)記語言的一個應(yīng)用)頁中。另一種是Application程序(即Java應(yīng)用程序),本書主要講解的是Java應(yīng)用程序。下面就以Java應(yīng)用程序為例,開始我們第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 }

【運行結(jié)果】

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

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

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

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

下面我們來解讀一下這個Java小程序,讓讀者對Java程序有個初步的認(rèn)知。更為詳細(xì)的知識點讀者可以參考后續(xù)相關(guān)章節(jié)進(jìn)行學(xué)習(xí)。

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

第2行和第9行。這一對大括號{}標(biāo)明了類的區(qū)域,在這個區(qū)域內(nèi)的所有內(nèi)容都是類的一部分。

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

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

第5行和第8行是main方法的開始和結(jié)束標(biāo)志,它們聲明了該方法的區(qū)域,在{}之內(nèi)的語句都屬于main方法。

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

1.5 探秘Java虛擬機(jī)(JVM)

本節(jié)視頻教學(xué)錄像:10分鐘

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

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

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

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

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

1.6 高手點撥

本節(jié)視頻教學(xué)錄像:5分鐘

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

由于Java語言的設(shè)計者十分熟悉C++語言,所以在設(shè)計時很好地借鑒了C++語言??梢哉f, Java語言是比C++語言“更加面向?qū)ο蟆钡囊环N編程語言。Java語言的語法結(jié)構(gòu)與C++語言的語法結(jié)構(gòu)十分相似,這使得C++程序員學(xué)習(xí)Java語言更加容易。

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

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

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

⑶ 取消了多重繼承這一復(fù)雜的概念。多重繼承會導(dǎo)致類中數(shù)據(jù)成員的“二義性”等問題,從而使得類的訪問結(jié)構(gòu)非常復(fù)雜。

2. 重視Java官網(wǎng)的文檔

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

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

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

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

產(chǎn)生這種錯誤的原因通常有兩個。

⑴ Java環(huán)境變量JAVA_HOME及ClassPath設(shè)置不正確,在設(shè)置環(huán)境變量時,在前一個環(huán)境變量前一定要用分號“;”以此區(qū)分不同的環(huán)境變量。同時要把當(dāng)前目錄“.”放進(jìn)環(huán)境變量中。這里的一個小點“.”代表的就是class類文件所在的當(dāng)前目錄。

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

        java Hello.class

而正確的方式為:

        java Hello

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

4. 正確保存Java的文件名

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

        public class Hello

這個公有類名名稱為Hello,那么這個類所在的源文件必須保存為Hello.java,由于Java語言是區(qū)分大小寫的,保存的Java文件名(除了擴(kuò)展名.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的文件,應(yīng)保存的文件名為HEllo.java,而不是目前保存的Hello.java。

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

1.7 實戰(zhàn)練習(xí)

本節(jié)視頻教學(xué)錄像:15分鐘

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

主站蜘蛛池模板: 民丰县| 错那县| 定西市| 田阳县| 宜兴市| 台北县| 卢氏县| 塘沽区| 怀化市| 大宁县| 远安县| 凭祥市| 徐州市| 鄢陵县| 惠东县| 华蓥市| 称多县| 满城县| 松阳县| 常宁市| 晴隆县| 兴仁县| 岳阳县| 靖安县| 海门市| 栖霞市| 准格尔旗| 龙南县| 南部县| 汝州市| 滕州市| 亳州市| 手游| 安远县| 扶绥县| 大田县| 额尔古纳市| 滨海县| 平凉市| 新泰市| 蛟河市|