《Java從小白到大牛》紙質版已經上架了!!!
本書第一個Java程序是通過控制臺輸出HelloWorld,以這個示例為切入點,向大家系統介紹Java程序的編寫、Java源代碼結構以及一些基礎知識。
在Java中,程序都是以類的方式組織的,Java源文件都保存為.java文件當中。每個可運行的程序都是一個類文件,或者稱之為字節碼文件,保存為.class文件。要實現在控制臺中輸出HelloWorld示例,則需要編寫一個Java類。
3.1 使用Eclipse實現
HelloWorld示例可通過多種工具實現,這一節首先介紹如何通過Eclipse實現。
3.1.1 創建項目
在Eclipse中通過項目(Project)管理Java類,因此需要先創建一個Java項目,然后在項目中創建一個Java類。
Eclipse創建項目步驟是:打開Eclipse,選擇菜單“文件”→“新建”→“Java項目”,打開新建Java項目對話框,如圖3-1所示。
下面簡要說明圖3-1所示各個選項:
- 項目名:是要創建的項目名稱。
- 使用缺省位置:選中該選項,創建的項目會保存到工作空間中。
- JRE:開發人員可以在這里指定項目運行所需要的JRE,默認是使用系統Path環境變量所指定的JRE。
- 項目布局:是設置項目中源文件和類文件的存放目錄,默認情況下選中“為源文件和類文件創建單獨的文件夾”,這個選項選中后,源文件和類文件會在兩個不同的文件夾下,即源文件被放置在當前項目的文件夾中,類文件被放置在當前項目的bin文件夾中;如果選中“使用項目文件夾作為源文件和類文件的根目錄”,則源文件和類文件都被放置在當前項目根目錄下,而且混合在一起。
- 工作集:可以將多個相關的項目集中在一個工作集中管理。
圖3-1所示對話框中看起來有很多項目需要設置,其實除了項目名稱必須輸入外,其他的完全可以采用默認值。選項設置完成后,單擊“下一步”按鈕,進入如圖3-2所示的Java設置對話框,在這里可以對源文件和類文件的保放文件夾進行進一步設置。確認無誤后,單擊“完成”按鈕創建項目。項目創建完成后,回到如圖3-3所示的Eclipse主界面。
圖3-1 新建Java項目對話框
圖3-2 Java設置對話框
圖3-3 項目創建完成
3.1.2 創建類
項目創建完成后,需要創建一個類執行控制臺輸出操作。選擇剛剛創建的項目,然后選擇菜單“文件”→“新建”→“類”,打開新建類對話框,在對話框中輸入如圖3-4所示內容。
下面簡要說明圖3-4所示各個選項:
- 源文件夾:由于創建項目時候指定了源文件夾,這里使用默認值即可。
- 包:是類所在的包,包名一般是公司域名的倒置,可以沒有。
- 名稱:是類的名稱。
- 修飾符:是類前面的修飾符,這些修飾符含義,目前先不解釋,選擇公有就可以了。
- 超類:即父類,這里可以指定該類的父類。
- 接口:指定該類實現哪些接口。
- 創建方法存根:就是在代碼創建這些方法,本例中需要選中第一個方法(main方法),這個main方法是程序的入口。
- 添加注釋:這里可以設置代碼是否生成注釋,也可以修改注釋模版。
圖3-4 創建類對話框
在圖3-4所示對話框中輸入完成,單擊“完成”按鈕就創建了一個Java類,如圖3-5所示,在包資源管理器中可以看到剛才創建的源文件。
圖3-5 創建類完成
3.1.3 運行程序
修改剛剛生成的HelloWorld.java源文件,在main方法中添加輸出語句,修該完成后代碼如下:
package com.a51work6;
public class HelloWorld {
public static void main(String[] args) { ①
System.out.print("Hello World."); ②
}
}
代碼第①行中的public static void main(String[] args)方法是一個應用程序的入口,也表明了HelloWorld是一個Java應用程序(Java Application),可以獨立運行。代碼第②行的System.out.print("Hello World.")語句是輸出Hello World.字符串到控制臺。
提示 在Java SE平臺有兩種可以獨立運行的程序:Java Application(Java應用程序)和Java Applet(Java小應用程序)兩種。Java應用程序具有public static void main(String[] args),上述HelloWorld就是這種類型。Java小應用程序是主要是嵌入到網頁中運行的,Java小應用程序是一種淘汰的技術,不再介紹Java小應用程序。
程序編寫完成可以運行了。如果是第一次運行,則需要選擇運行方法,具體步驟是:選中文件,選擇菜單“運行”→“運行方法”→“Java應用程序”,這樣就會運行HelloWorld程序了。如果已經運行過程一次,就不需要這么麻煩了,直接單擊工具欄中的“運行”按鈕,或選擇菜單“運行”→“運行”,或使用快捷鍵Ctrl+F11,都可以就運行上次的程序了。運行結果如圖3-6所示,Hello World.字符串到下面的控制臺。
圖3-6 運行結果
3.2 文本編輯工具+JDK實現
如果不想使用IDE工具(筆者建議出學者通過這種方式學習Java),那么文本編輯工具+JDK對于初學者而言是一個不錯的選擇,這種方式可以使初學者了解到Java程序的編譯和運行過程,通過自己在編輯器中敲入所有代碼,可以幫助熟悉常用類和方法。
注意 在2.3.3節介紹過EditPlus與JDK集成過程,2.3.3節集成方式有一個弊端是:不能執行帶有包的Java應用程序。
3.2.1 編寫源代碼文件
首先使用任何文本編輯工具創建一個文件,然后將文件保存為HelloWorld.java。接著在HelloWorld.java文件中編寫如下代碼:
package com.a51work6;
public class HelloWorld {
public static void main(String[] args) {
System.out.print("Hello World.");
}
}
在Java中一個源程序文件中可以定義多個類,如下代碼定義了三個類HelloWorld、A和B。
//HelloWorld.java源文件
package com.a51work6;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
class A {
}
class B {
}
注意 一個源程序文件包含多個類時,需要注意如下問題:
1. 只能有一個類聲明為公有(public)的。
2. 文件命名必須與公有類名完全一致,包括字母大小寫。
3. public static void main(String[] args)只能定義在公有類中。
3.2.2 編譯程序
編譯程序需要在命令行中使用JDK的javac指令編寫,參考2.1.2節打開命令行,如圖3-7所示,通過cd命令進入到源文件所在的目錄,然后執行javac指令。如果沒有錯誤提示,說明編譯成功,編譯成功則在當前目錄下面生成類文件,如圖3-8所示生成了三個類文件,這是因為HelloWorld.java源文件中定義了三個類。
圖3-7 編譯源文件
圖3-8 編譯成功
上述編譯過程雖然成功了,但是運行時會有以下問題,這是由于HelloWorld.java源文件中定義了包com.a51work6,編譯應該使用-d參數,編譯指令如圖3-9所示。
圖3-9 編譯有包的源文件
編譯指令javac中的-d參數是指定類文件生成位置,-d后面跟的是一個目錄的路徑,本例中使用“.”點表示當前目錄,編譯成功之后的目錄結果如下:
當前目錄
│ HelloWorld.java
└─com
└─a51work6
A.class
B.class
HelloWorld.class
其中的com是目錄,它在當前目錄的子目錄,a51work6也是目錄,它是com的子目錄,可以包com.a51work6會生成com\a51work6的目錄結構。
3.2.3 運行程序
編譯成功之后就可以運行了。執行類文件需要在命令行中使用JDK的java指令,參考2.1.2節打開命令行,如圖3-10所示,通過cd命令進入到源文件所在的目錄,然后執行java -classpath .;c:\com.a51work6.HelloWorld指令,執行成功在命令行窗口輸出Hello World!字符串。
圖3-10 運行類文件
注意 java和javac指令都可以帶有-classpath(縮寫-cp),它用來指定類路徑,即搜索類的路徑,類似于操作系統中的path,路徑之間用分號分隔,其中點(.)表示當前路徑。就本例而言運行java程序HelloWorld所需要的全部類都在當前路徑下,因此只需要設置-classpath .就可以了,或者省略(當前路徑不用指定)。
3.3 代碼解釋
經過前文的介紹,讀者應該能夠照貓畫虎,自己動手做一個Java應用程序了。但還是對其中的一些代碼不甚了解,下面來詳細解釋一下HelloWorld示例中的代碼。
//包定義
package com.a51work6; ①
//類定義
public class HelloWorld { ②
//定義靜態main方法
public static void main(String[] args) { ③
System.out.print("Hello World."); ④
}
}
代碼第①行是定義類所在的包,package是關鍵字,com.a51work6是包名,包是一個命名空間,可以防止命名沖突問題,關于包的概念將在后面章節詳細介紹。
代碼第②行是定義類,public修飾符是聲明類是公有的,class是定義類關鍵字,HelloWorld是自定義的類名了,后面跟有“{…}”是類體,類體中會有成員變量和方法,也會有一些靜態變量和方法。
代碼第③行是定義靜態main方法,而作為一個Java應用程序,類中必須包含靜態main方法,程序執行是從main方法開始的。main方法中除參數名args可以自定義外,其他必須嚴格遵守如下來兩種格式:
public static void main(String args[])
public static void main(String[] args)
這兩種格式本質上就是一種,String args[]和String[] args都是聲明String數組。另外,args參數是程序運行時,通過控制臺向應用程序傳遞字符串參數。
代碼第④行System.out.print("Hello World.");語句是通過Java輸出流(PrintStream)對象System.out打印Hello World.字符串,System.out是標準輸出流對象,它默認輸出到控制臺。輸出流(PrintStream)中常用打印方法:
- print(String s) :打印字符串不換行,有多個重載方法,可以打印任何類型數據。
- println(String x) :打印字符串換行,有多個重載方法,可以打印任何類型數據。
- printf(String format, Object... args) :使用指定輸出格式,打印任何長度的數據,但不換行。
修改HelloWorld.java示例代碼如下:
public class HelloWorld {
public static void main(String[] args) {
//通過print打印第一個控制臺參數
System.out.print(args[0]); ①
//通過println打印第二個控制臺參數
System.out.println(args[1]); ②
//通過printf打印第三個控制臺參數,%s表示格式化字符串
System.out.printf("%s", args[2]); ③
System.out.println();
int i = 123;
//%d表示格式化整數
System.out.printf("%d\n", i); ④
double d = 123.456;
//%f表示格式化浮點數
System.out.printf("%f%n", d); ⑤
System.out.printf("%5.2f", d); ⑥
}
}
編譯HelloWorld.java源代碼后,通過如圖3-11所示,其中的java命令行后面的HelloWorld是要運行的類文件,Tony Hello World.是參數,多個參數用空格分割。
圖3-11 在命令行中運行程序
上述代碼第①行使用print方法打印第一個參數args[0],注意該方法是打印完成后面不換行,從輸出結果中可見第一個參數Tony和第二個參數Hello連在一起了。代碼第②行使用println方法打印第二個參數args[1],從輸出結果中可見第二個參數Hello后面是有換行的。
代碼第③、④、⑤、⑥行都是使用printf方法打印,注意printf方法后面是沒有換行的,想在后面換行可以通過System.out.println()語句實現,或在打印第字符串后面添加換行符號(\n或%n),見代碼第④行和第⑤行。代碼第%5.2f也表示格式化浮點數,5表示總輸出的長度,2表示保留的小數位。
本章小結
本章通過一個HelloWorld示例入手,介紹使用Eclipse和使用文本工具+JDK實現該示例具體過程。掌握Eclipse使用非常重要,但是使用文本工具+JDK對于初學者也很有幫助。最后詳細解釋了HelloWorld示例。
配套視頻
http://www.zhijieketang.com/classroom/6/courses
配套源代碼
http://www.zhijieketang.com/group/5