- 零基礎學Java(第4版)
- 常建功 陳浩 黃淼等編著
- 287字
- 2019-01-01 00:49:57
第2章 Java開發(fā)工具及環(huán)境設置
Java是很出色的面向對象高級語言,面向對象技術將在第7章介紹,這里只需要讀者知道這個概念。正如C語言、C++語言、C#語言一樣,任何高級語言都需要一個運行平臺,即編寫Java語言的計算機應用程序,需要一個編輯、編譯和運行的環(huán)境,這里將詳細介紹Java高級語言的開發(fā)工具及相應的環(huán)境設置。本章將講述應用程序的一個開發(fā)流程,另外還要講述開發(fā)Java程序所要使用的開發(fā)工具,最后會編寫一個最簡單的Java程序,并通過對程序的具體分析,使讀者能夠對編寫Java代碼有一個初步的認識。
本章重點:
□ 開發(fā)工具的下載和安裝。
□ JDK的組成和配置。
□ 編寫并運行簡單的Java程序。
2.1 Java開發(fā)工具簡介
Java語言是一種解釋型的語言,即讀一句程序執(zhí)行一句,這樣就需要一個解釋器完成源程序到機器語言的翻譯過程。同時Java是跨平臺的語言,跨平臺是指Java程序可以在安裝任何操作系統(tǒng)的計算機上運行,其前提是需要安裝Java虛擬機(JVM),而虛擬機和解釋器都是JDK的一部分,JDK是Java開發(fā)工具集,它包含一套工具,如剛才講的源程序解釋器、JVM,還包括編譯工具(Javac.exe)、執(zhí)行程序(Java.exe)等。如果想讓運行程序的計算機知道這些工具的位置,并找到這些工具,就需要下載、安裝、配置并測試JDK工具。
2.1.1 下載并安裝JDK
與Java相關的基礎平臺都是由Sun公司提供的,開發(fā)人員可以通過http://www.oracle.com/ technetwork/java/index.html網(wǎng)站了解有關Java的最新技術,并可以下載相關的軟件。Java網(wǎng)站的首頁如圖2-1所示。

圖2-1 Java網(wǎng)站的首頁
注意
之所以是Oracle公司網(wǎng)站,而不是Sun公司網(wǎng)站,是因為在2009年8月21日Oracle公司收購了Sun公司。
本書中的代碼采用JDK 7.0版本進行開發(fā),因此在Java網(wǎng)站的首頁右側,單擊“Java SE 7”鏈接,進入關于Java SE 7的下載界面,如圖2-2所示。

圖2-2 Java SE 7的下載界面
在Java SE 7的下載界面中,單擊“JDK Platform(JDK) 7”上面的圖片按鈕,即可進入JDK 7.0的下載界面,如圖2-3所示。在JDK 7.0的下載界面中,首先選擇“Accept License Agreement”單選按鈕,本書采用Windows 32位平臺,因此選擇“jdk-7-windows-i586.exe”,如圖2-4所示。在該界面中,單擊“jdk-7-windows-i586.exe”鏈接,即可下載JDK,如圖2-5所示。

圖2-3 JDK 7.0的下載界面

圖2-4 頁面根據(jù)前面的選擇內容跳轉到要下載的界面

圖2-5 下載JDK
下載到本地的JDK大約為120MB。下載完就可以進行安裝,具體安裝步驟如下:
1)雙擊執(zhí)行jdk-7-windows-i586.exe安裝程序,便可自動解壓縮進行安裝。首先出現(xiàn)的是安裝程序準備界面,如圖2-6所示。

圖2-6 安裝程序準備界面
2)單擊“下一步”按鈕,準備過程完成后,安裝程序會自動打開“自定義安裝”界面,在該界面中單擊“更改”按鈕,就會出現(xiàn)“更改文件夾”界面,如圖2-7所示。

圖2-7 “更改文件夾”界面
3)選擇好相應的路徑(如D:\Java\jdk1.7.0),單擊“確定”按鈕,配置好的“自定義安裝”界面如圖2-8所示。

圖2-8 “自定義安裝”界面
4)然后單擊“下一步”按鈕,JDK即可開始安裝。JDK安裝完畢后,系統(tǒng)會打開JRE自定義安裝界面,在該對話框中同樣也可以進行路徑的修改,如圖2-9所示。

圖2-9 JRE自定義安裝界面
5)默認JRE的安裝路徑,也可以將安裝路徑改為D:\Java\jre7,然后單擊“下一步”按鈕,即可完成安裝。JDK安裝完成的界面如圖2-10所示。

圖2-10 JDK安裝完成的界面
2.1.2 設定環(huán)境變量
JDK安裝完畢后,還不能馬上使用。如果想使用JDK實現(xiàn)編譯運行Java文件等操作,還需要設定系統(tǒng)的環(huán)境變量Path與ClassPath,操作步驟如下:
1)在Windows桌面中,用右鍵單擊“我的電腦”圖標,彈出快捷菜單。
2)在彈出的快捷菜單中選擇“屬性”,彈出“系統(tǒng)屬性”對話框。
3)在“系統(tǒng)屬性”對話框中,選擇“高級”標簽下的“環(huán)境變量”按鈕,彈出“環(huán)境變量”對話框,如圖2-11所示。

圖2-11 “環(huán)境變量”對話框
4)單擊“系統(tǒng)變量”區(qū)域中的“編輯”按鈕,在彈出的“編輯系統(tǒng)變量”對話框中,設定系統(tǒng)變量名為Path,變量值為D:\Java\jdk1.7.0\bin,如圖2-12所示。

圖2-12 編輯系統(tǒng)變量Path
5)單擊“系統(tǒng)變量”區(qū)域中的“新建”按鈕,在彈出的“新建系統(tǒng)變量”對話框中,設定變量名為ClassPath,變量值為D:\Java\jdk1.7.0\lib\dt.jar;D:\Java\jdk1.7.0\lib\tools.jar,如圖2-13所示。

圖2-13 新建系統(tǒng)變量ClassPath
6)單擊“系統(tǒng)變量”區(qū)域中的“新建”按鈕,在彈出的“新建系統(tǒng)變量”對話框中,設定變量名為JAVA HOME,變量值為D:\Java\jdk1.7.0,如圖2-14所示。

圖2-14 新建系統(tǒng)變量JAVA HOME
2.1.3 驗證JDK環(huán)境是否配置成功
為了驗證JDK是否配置成功,打開DOS窗口,在命令提示符下輸入“java”,然后按Enter鍵,若輸出Java的相關信息,則表示JDK配置成功,如圖2-15所示。

圖2-15 輸出Java的相關信息
2.2 JDK內置工具
Java程序需要運行環(huán)境的支持,同時編譯、解釋Java程序,執(zhí)行Java應用程序和Java小程序也需要必要的工具,本節(jié)重點講解JDK中包含的5種常用工具,即Javac.exe、Java.exe、appletviewer.exe、Javadoc.exe和Javap.exe。在JDK中還集成了Java虛擬機(JVM),JVM提供了Java程序的運行環(huán)境,它負責解釋.class文件(Java源程序經(jīng)過編譯后的文件),并提交給機器執(zhí)行。
注意
這里對JVM不再做過多的說明,讀者只要知道它的作用就足夠了。
2.2.1 JDK常用工具
JDK是一個開發(fā)工具集合,作為實用程序,工具庫有5種主要程序。
1)Javac:Java編譯器,將Java源代碼轉換為字節(jié)碼(生成與源文件名同名的.class文件)。
2)Java:Java解釋器,執(zhí)行Java源程序的字節(jié)碼。
3)appletviewer:小應用程序瀏覽器,執(zhí)行嵌入HTML文件中的Java小程序的Java瀏覽器。
4)Javadoc:依據(jù)Java源程序和說明語句生成各種HTML文檔。
5)Javap:Java反匯編器,顯示編譯類文件中可訪問的功能和數(shù)據(jù),顯示字節(jié)碼的含義。
2.2.2 JDK常用工具的使用實例
2.2.1節(jié)已經(jīng)詳細介紹了各種實用工具的含義,這里就依次介紹如何使用這些工具。
Javac和Java工具在2.3節(jié)通過一個Java應用程序詳細說明了其用法。這里介紹2.2.1節(jié)所列的其他工具的使用,借用2.4節(jié)中的Java應用程序JavaApplet.java。圖2-16說明如何使用appletviewer。

圖2-16 使用appletviewer
說明
這里僅僅說明如何使用該工具,即該工具的語法規(guī)則,至于Java Applet如何使用,可以參考2.4節(jié)的例子。
圖2-17說明如何使用Javadoc。

圖2-17 使用Javadoc
說明
這里借用了2.4節(jié)中的JavaApplet.java源程序,在圖2-17中可以清楚地看到Javadoc工具的 執(zhí) 行 過 程,首 先 是 加 載 源 文 件JavaApplet.java,創(chuàng)建相關Javadoc信息,然后產(chǎn)生各種html文件,這些文件保存在執(zhí)行Javadoc命令的當前目錄下。至于文件內容,讀者只要自己實踐一次,打開觀察一下就很清楚了,這里不再做過多介紹。
圖2-18為在D盤根目錄下通過各種Javadoc生成的html文件。圖2-19說明如何使用Javap。

圖2-18 Javadoc生成的各種html文件

圖2-19 使用Javap
說明
這里使用Javap反編譯MyFirstJavaProgram.class(源程序可參見2.3節(jié)的代碼)文件,反編譯的結果是該類提供的可訪問的方法和屬性,這里可訪問是指具有public訪問權限的方法或靜態(tài)屬性,如在MyFirstJavaProgram.java源文件中,有一個public訪問權限的String testString和具有public訪問權限的main()方法,同時Java默認的構造函數(shù)也具有public訪問權限,所以這些都可以通過反編譯工具Javap體現(xiàn)出來。
本節(jié)詳細介紹了JDK的幾種常用工具,讀者一定要用心體會,自己操作一遍,就可以很快掌握這些工具的用法,尤其是Javac.exe和Java.exe,它們是最常用的兩種工具,在2.4節(jié)有具體的操作實例,讀者可以參考。隨著學習的深入,還會附帶介紹其他工具(如jar打包工具等),對于初學者首先掌握本節(jié)介紹的基本工具是最重要的,這樣不會耽誤下面的學習內容,同時為深入學習JDK的其他工具打下良好的基礎。
2.2.3 Java應用程序的發(fā)布工具
jar文件被打包成ZIP文件格式,所以可以使用jar工具實現(xiàn)壓縮和解壓縮數(shù)據(jù)。jar工具可以實現(xiàn)應用程序的發(fā)布,把應用程序所需要的資源(如類、視頻、音頻、圖片等)打包成.jar文件,該文件具有跨平臺特性,可以在任何運行虛擬機的操作系統(tǒng)平臺上執(zhí)行。
jar工具是JDK的一部分,使用該工具實現(xiàn)jar文件的基本功能。jar命令將啟動打包工具軟件,根據(jù)自己的需要調用不同的參數(shù)實現(xiàn)資源文件打包。表2-1為jar工具的操作命令格式和功能。
表2-1 jar工具的操作命令和功能列表

2.3 一個簡單的Java應用程序
【實例2-1】現(xiàn)在已經(jīng)完成了JDK的安裝和相應的環(huán)境設置,下面用Windows下自帶的記事本編輯一個Java應用程序,并執(zhí)行該程序,讀者可以通過該程序的編譯和執(zhí)行對Java程序的執(zhí)行有一個直觀的認識。
1)編寫源程序:打開記事本,編寫如下的Java程序,并保存在D盤根目錄下,即D:\MyFirstJavaProgram.java。以下是一個Java應用程序,只輸出一句“Hello Java!!!”。
01 //定義一個類
02 public class MyFirstJavaProgram{
03 //程序執(zhí)行的入口,每個Java應用程序都有一個main()函數(shù)
04 public static void main(String args[ ]){ //程序的入口函數(shù)
05 //在DOS窗口打印一行字符串:Hello Java!!!
06 System.out.println("Hello Java!!!");
07 }
08 }
【代碼說明】第4行的程序很關鍵,是Java程序中應用程序的入口函數(shù)main()。第6行是輸出的關鍵,通過println()方法輸出相應的內容。
說明
在初學者編寫源代碼時,最好選擇無格式的文本編輯器,如Windows下的記事本,存儲源程序時其擴展名必須是.java。
2)編譯源程序:單擊“開始”|“運行”命令,在“運行”對話框中輸入“cmd”命令,如圖2-20所示。

圖2-20 “運行”對話框
單擊圖2-20中的“確定”按鈕,打開DOS窗口,進入D盤根目錄,在當前目錄下輸入“javac MyFirstJavaProgram.java”,編譯有兩個作用:一是檢查程序的語法錯誤,二是導入源程序中需要的類庫,編譯的結果是.class文件,該文件可以被JVM直接運行。如果編譯正確,顯示結果如圖2-21所示。

圖2-21 編譯Java源程序
注意
在讀者開始使用記事本編輯Java源程序時,可能會出現(xiàn)一些輸入法錯誤,造成程序無法編譯,如字符串的雙引號使用了中文輸入法,則無法通過編譯,并提示出現(xiàn)非法字符。
【運行效果】執(zhí)行程序:在DOS窗口中輸入“java MyFirstJavaProgram”,則程序執(zhí)行結果如圖2-22所示。

圖2-22 執(zhí)行Java程序的結果
注意
在使用Java.exe工具執(zhí)行編譯過的Java程序時,需要執(zhí)行的文件名就是源文件名,但不需要文件后綴(如.class)。執(zhí)行MyFirstJavaProgram時,只需要輸入java MyFirstJavaProgram,而不是java MyFirstJavaProgram.class。
2.4 一個簡單的Java Applet應用程序
還有一種小應用程序,即Applet,其實它就是一段Java代碼,但這段代碼可以以適當?shù)姆绞角度氲紿TML頁面。這里舉一個簡單的例子,讓讀者對Java語言在網(wǎng)絡上的應用有直觀和初步的認識。
2.4.1 編寫一個Java Applet
首先打開記事本,編寫代碼如下所示。將文件保存在D盤根目錄下,文件名設置為JavaApplet.java。這是一個簡單的Applet應用程序,只輸出一句話“This is my first Java Applet!”。
01 //下面兩行導入實現(xiàn)Applet需要的類庫 02 import java.applet.Applet; 03 import java.awt .*; 04 //通過繼承方式定義并實現(xiàn)一個Applet類JavaApplet 05 public class JavaApplet extends Applet{ 06 public void paint(Graphics g){ 07 //調用Graphics對象g的drawString方法,在html頁面的指定位置打印一行字符串 08 g.drawString(“This is my first Java Applet!”,20,10); 09 } 10 }
【代碼說明】第2~3行導入實現(xiàn)Applet需要的類庫,通過import關鍵字執(zhí)行導入。第5行創(chuàng)建一個類Java Applet。第8行輸出用戶能看到的結果。
2.4.2 編寫承載Java Applet的HTML文件
打開一個記事本,編寫如下代碼,同樣保存在D盤根目錄下,文件名為Applet.html,這是一個HTML頁面文件。
01 <html> <!--HTML文件標簽--> 02 <title> My Applet Test</title> 03 <h1>My Applet Test</h1> 04 <applet 05 //JavaApplet.class就是JavaApplet.Java經(jīng)過編譯后的類,該類在這里得到調用 06 code =”JavaApplet.class” 07 width=250 08 height=250 09 name=”MyApplet”> <!—在HTML文件中插入一個<applet>標簽--> 10 </applet> 11 </html>
【代碼說明】第1行和第11行的<html></html>是HTML文件的標識。第4~10行在HTML文件中插入了一個<applet>標簽,注意第6行的code屬性為JavaApplet.class,是編譯后的JavaApplet.java。
2.4.3 Java Applet運行過程
編譯JavaApplet.java,在DOS窗口中該文件所在的目錄下輸入“javac JavaApplet.java”,如果編譯成功,效果會如圖2-23所示。在同樣的目錄下輸入“appletviewer applet.html”,效果如圖2-24所示。按Enter鍵后是Java Applet的運行結果,如圖2-25所示。

圖2-23 編譯JavaApplet.java程序的結果

圖2-24 執(zhí)行Applet.html

圖2-25 Java Applet運行結果
說明
只要讀者認真體會上述過程,再實際運行一下,就會很快理解并掌握本節(jié)的基本內容。
2.5 Java程序員的編碼規(guī)則
軟件工程發(fā)展到現(xiàn)在已經(jīng)非常成熟。對于程序員編碼的規(guī)則也限定得越來越多。早年天馬行空的編程與企業(yè)的要求漸行漸遠。每個公司都會對程序員的編碼習慣進行限制,包括命名、格式等。有的可以說是相當苛刻,當然每個公司的要求也是不同的,沒必要每個要求都知道。
如果讀者進入公司,按照公司要求的編碼規(guī)范去做即可。這里是筆者搜集的一些基本要求,主要是一些常識和編碼思想,也是大家都比較認同的編碼規(guī)則。如果新入門讀者有的地方不明白也沒有太大關系,等學完后面的知識再回來看這節(jié)內容就可以了。
(1)注釋
注釋是用來提供源代碼自身沒有提供的附加信息,主要包含對代碼的總體說明、步驟說明、設計決策信息和其他一些代碼中不容易看出來的信息。
注意
注釋并不是越多越好,過多且容易過時的注釋往往會影響代碼的更新和閱讀。
(2)命名規(guī)范
命名規(guī)范提供一些有關標識符功能的信息,有助于理解代碼,使程序更易讀。
在標識符中,所有單詞的首字母大寫,被稱為駝峰標識。字段、方法以及對象的首字母小寫。例如:類名可以寫作MyFirstClass,而方法名則要寫成getName()。
如果是常量,則static final基本類型標識符中的所有字母大寫。這樣就可以標志出它們屬于編譯期的常量,如MAX LENGTH。
Java包(Package)的包名全部小寫,首字母也不例外。例如,com.java.java.util。
(3)類的測試
每當創(chuàng)建一個類時,考慮在該類中寫主方法進行測試,以保證類的正確性和功能的完整性。測試代碼也可以作為如何使用類的示例來使用。
(4)類的設計
設計類時要盡量使其功能單一,只解決某些特定的問題;不要設計方法眾多且差別較大的類。
注意
設計類時要考慮該類的維護和發(fā)展,考慮代碼復用和多態(tài)。
(5)方法的設計
方法的設計與類一樣,都是盡量明確其功能,簡明扼要,功能單一。當方法過長時,盡量考慮將其分解成幾個方法。
(6)封裝
對代碼進行封裝時,出于安全方面的考慮,盡可能將方法和屬性“私有”。
(7)采用內部類
當類和類之間關系非常緊密時,可以考慮采用內部類來實現(xiàn),以改善編碼和維護的工作。
(8)接口編程
接口主要描述了可能完成哪些功能和方法,而類描述的是具體的實施細節(jié)。故當需要某個類作為基礎類時,盡量考慮將其變成一個接口。如果不得不使用方法或成員變量,才將其變成一個抽象類。
(9)繼承
對于繼承的使用應該謹慎,盡量采取實現(xiàn)接口的方法來達到目的。只有在必須繼承的情況下才考慮繼承。
(10)分析的順序
對于項目的分析要從宏觀到微觀,從整體到局部。首先把握項目的整體概況,掌握全局之后再考慮細節(jié)的實現(xiàn)。
(11)性能的優(yōu)化
性能的優(yōu)化是考察一個項目好壞的一個方面,但并不是最重要的方面。正確的方法是先讓程序運行起來,只有在確實存在性能瓶頸才進行優(yōu)化。如果很小性能提升的代價是代碼的難于理解和維護,將得不償失。
(12)設計與編碼
對于一個項目而言,分析設計和編碼的時間比例大約是8∶2,通常會在擁有完善的設計和解決方案以后才進行編碼工作,此時的編碼工作將非常簡單。如果只是花很少的時間進行分析和設計,那么編碼工作必定困難重重,甚至延長項目時間,造成違約。
2.6 常見疑難解答
2.6.1 Java文件擴展名是否區(qū)分大小寫
如果用記事本寫了一個很短的程序,如下所示:
01 //定義一個類 02 public class FirstJava{ 03 //程序執(zhí)行的入口,每個Java應用程序都有一個main()函數(shù) 04 public static void main(String args[]){ //主方法 05 //在DOS窗口打印一行字符串:Hello Java!!! 06 System.out.println(“Hello!!!”); 07 } 08 }
將這個文件保存在D盤根目錄下,名字為Hello.Java,那么在DOS中的D盤根目錄下執(zhí)行javac命令,根本就不會編譯這個文件。將擴展名改為小寫的Hello.java,則再執(zhí)行javac命令,就可以編譯通過了。所以說Java文件的擴展名區(qū)分大小寫。
2.6.2 Javac xxx.java順利通過,但Java xxx顯示 “NoClassDefFoundError”
Java命令在一定的范圍(ClassPath)內搜索要用的Class文件,但是未能找到。遇到這類問題,首先請確認沒有錯誤輸入成java xxx.class,其次,檢查ClassPath環(huán)境變量,如果設置的該變量沒有包含“.”(代表當前目錄),就會遇到這個問題,處理的方法就是在ClassPath環(huán)境變量中加入Java命令的當前目錄這一項。
2.6.3 導致錯誤“Exception in thread main java.lang.NoSuchMethodError:main”的原因
首先,在程序中,每個Java文件有且只能有一個public類,這個類的類名必須與文件名的大小寫完全一樣;其次,在要運行的類中,有且只能有一個“public static void main(String[] args)”方法,這個方法就是主運行程序。
根據(jù)上面的這種Java結構,當遇到Path問題時,操作系統(tǒng)會在一定的范圍(Path)內搜索javac.exe。如果沒有找到,那么編輯操作系統(tǒng)環(huán)境變量,新增一個“JAVA HOME”變量,設為JDK的安裝目錄,再編輯Path變量,加上一項“%JAVA HOME%\bin”,然后關閉當前DOS窗口,再新開一個DOS窗口,就可以使用javac和java命令了。
2.7 小結
在學習本章時,讀者一定要注意帶有“說明”和“注意”字樣的內容,忽視這些細節(jié)往往會造成程序編譯、運行的異常,會給初學者帶來理解上的困惑。讀者一定要動手編寫本章提供的例子,只有自己動手實踐,才能有所收獲。
2.8 習題
一、填空題
1.JDK安裝完畢后,還不能馬上使用。如果想使用JDK實現(xiàn)編譯、運行Java文件等操作,還需要設定系統(tǒng)的環(huán)境變量__________和__________。
2.JDK是一個開發(fā)工具集合,作為實用程序,工具庫有5種主要程序:__________、__________、__________、__________ 和__________。
3.在Java中,__________工具可以實現(xiàn)應用程序的發(fā)布,把應用程序所需要的資源(如類、視頻、音頻、圖片等)打包成__________。
4.有一種小應用程序,其實它就是一段Java代碼,但這段代碼可以以適當?shù)姆绞角度氲紿TML頁面,這種應用程序是__________。
二、上機實踐
1.如何把一個Java Applet程序嵌入到一個網(wǎng)頁上?
【提示】可以仿照2.4節(jié)的例子來編寫。
2.編寫一個簡單的Java程序,測試Java源代碼的擴展名是否區(qū)分大小寫?
【提示】Java源代碼的擴展名為“.java”。
- JavaScript前端開發(fā)模塊化教程
- jQuery Mobile Web Development Essentials(Third Edition)
- ASP.NET Web API:Build RESTful web applications and services on the .NET framework
- Python高級編程
- Java持續(xù)交付
- Advanced Express Web Application Development
- 區(qū)塊鏈技術進階與實戰(zhàn)(第2版)
- 開源項目成功之道
- 分布式架構原理與實踐
- Penetration Testing with the Bash shell
- Scratch編程從入門到精通
- INSTANT PLC Programming with RSLogix 5000
- React and React Native
- Java核心技術速學版(第3版)
- React.js 16從入門到實戰(zhàn)