《Java從小白到大牛》紙質(zhì)版已經(jīng)上架了B!锉试!
本書第一個Java程序是通過控制臺輸出HelloWorld纬纪,以這個示例為切入點(diǎn),向大家系統(tǒng)介紹Java程序的編寫只损、Java源代碼結(jié)構(gòu)以及一些基礎(chǔ)知識一姿。
在Java中,程序都是以類的方式組織的跃惫,Java源文件都保存為.java文件當(dāng)中叮叹。每個可運(yùn)行的程序都是一個類文件,或者稱之為字節(jié)碼文件爆存,保存為.class文件衬横。要實(shí)現(xiàn)在控制臺中輸出HelloWorld示例,則需要編寫一個Java類终蒂。
3.1 使用Eclipse實(shí)現(xiàn)
HelloWorld示例可通過多種工具實(shí)現(xiàn)蜂林,這一節(jié)首先介紹如何通過Eclipse實(shí)現(xiàn)。
3.1.1 創(chuàng)建項(xiàng)目
在Eclipse中通過項(xiàng)目(Project)管理Java類拇泣,因此需要先創(chuàng)建一個Java項(xiàng)目噪叙,然后在項(xiàng)目中創(chuàng)建一個Java類。
Eclipse創(chuàng)建項(xiàng)目步驟是:打開Eclipse霉翔,選擇菜單“文件”→“新建”→“Java項(xiàng)目”睁蕾,打開新建Java項(xiàng)目對話框,如圖3-1所示债朵。
下面簡要說明圖3-1所示各個選項(xiàng):
- 項(xiàng)目名:是要創(chuàng)建的項(xiàng)目名稱子眶。
- 使用缺省位置:選中該選項(xiàng),創(chuàng)建的項(xiàng)目會保存到工作空間中序芦。
- JRE:開發(fā)人員可以在這里指定項(xiàng)目運(yùn)行所需要的JRE臭杰,默認(rèn)是使用系統(tǒng)Path環(huán)境變量所指定的JRE。
- 項(xiàng)目布局:是設(shè)置項(xiàng)目中源文件和類文件的存放目錄谚中,默認(rèn)情況下選中“為源文件和類文件創(chuàng)建單獨(dú)的文件夾”渴杆,這個選項(xiàng)選中后,源文件和類文件會在兩個不同的文件夾下宪塔,即源文件被放置在當(dāng)前項(xiàng)目的文件夾中磁奖,類文件被放置在當(dāng)前項(xiàng)目的bin文件夾中;如果選中“使用項(xiàng)目文件夾作為源文件和類文件的根目錄”某筐,則源文件和類文件都被放置在當(dāng)前項(xiàng)目根目錄下比搭,而且混合在一起。
- 工作集:可以將多個相關(guān)的項(xiàng)目集中在一個工作集中管理南誊。
圖3-1所示對話框中看起來有很多項(xiàng)目需要設(shè)置身诺,其實(shí)除了項(xiàng)目名稱必須輸入外蔽莱,其他的完全可以采用默認(rèn)值。選項(xiàng)設(shè)置完成后戚长,單擊“下一步”按鈕盗冷,進(jìn)入如圖3-2所示的Java設(shè)置對話框,在這里可以對源文件和類文件的保放文件夾進(jìn)行進(jìn)一步設(shè)置同廉。確認(rèn)無誤后仪糖,單擊“完成”按鈕創(chuàng)建項(xiàng)目。項(xiàng)目創(chuàng)建完成后迫肖,回到如圖3-3所示的Eclipse主界面锅劝。
圖3-1 新建Java項(xiàng)目對話框
圖3-2 Java設(shè)置對話框
圖3-3 項(xiàng)目創(chuàng)建完成
3.1.2 創(chuàng)建類
項(xiàng)目創(chuàng)建完成后,需要創(chuàng)建一個類執(zhí)行控制臺輸出操作蟆湖。選擇剛剛創(chuàng)建的項(xiàng)目故爵,然后選擇菜單“文件”→“新建”→“類”,打開新建類對話框隅津,在對話框中輸入如圖3-4所示內(nèi)容诬垂。
下面簡要說明圖3-4所示各個選項(xiàng):
- 源文件夾:由于創(chuàng)建項(xiàng)目時候指定了源文件夾,這里使用默認(rèn)值即可伦仍。
- 包:是類所在的包结窘,包名一般是公司域名的倒置,可以沒有充蓝。
- 名稱:是類的名稱隧枫。
- 修飾符:是類前面的修飾符,這些修飾符含義谓苟,目前先不解釋官脓,選擇公有就可以了。
- 超類:即父類涝焙,這里可以指定該類的父類卑笨。
- 接口:指定該類實(shí)現(xiàn)哪些接口。
- 創(chuàng)建方法存根:就是在代碼創(chuàng)建這些方法纱皆,本例中需要選中第一個方法(main方法)湾趾,這個main方法是程序的入口芭商。
- 添加注釋:這里可以設(shè)置代碼是否生成注釋派草,也可以修改注釋模版。
圖3-4 創(chuàng)建類對話框
在圖3-4所示對話框中輸入完成铛楣,單擊“完成”按鈕就創(chuàng)建了一個Java類近迁,如圖3-5所示,在包資源管理器中可以看到剛才創(chuàng)建的源文件簸州。
圖3-5 創(chuàng)建類完成
3.1.3 運(yùn)行程序
修改剛剛生成的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)方法是一個應(yīng)用程序的入口,也表明了HelloWorld是一個Java應(yīng)用程序(Java Application)搏存,可以獨(dú)立運(yùn)行瑰步。代碼第②行的System.out.print("Hello World.")語句是輸出Hello World.字符串到控制臺。
提示 在Java SE平臺有兩種可以獨(dú)立運(yùn)行的程序:Java Application(Java應(yīng)用程序)和Java Applet(Java小應(yīng)用程序)兩種璧眠。Java應(yīng)用程序具有public static void main(String[] args)缩焦,上述HelloWorld就是這種類型。Java小應(yīng)用程序是主要是嵌入到網(wǎng)頁中運(yùn)行的责静,Java小應(yīng)用程序是一種淘汰的技術(shù)袁滥,不再介紹Java小應(yīng)用程序。
程序編寫完成可以運(yùn)行了灾螃。如果是第一次運(yùn)行题翻,則需要選擇運(yùn)行方法,具體步驟是:選中文件腰鬼,選擇菜單“運(yùn)行”→“運(yùn)行方法”→“Java應(yīng)用程序”嵌赠,這樣就會運(yùn)行HelloWorld程序了。如果已經(jīng)運(yùn)行過程一次熄赡,就不需要這么麻煩了猾普,直接單擊工具欄中的“運(yùn)行”按鈕,或選擇菜單“運(yùn)行”→“運(yùn)行”本谜,或使用快捷鍵Ctrl+F11初家,都可以就運(yùn)行上次的程序了。運(yùn)行結(jié)果如圖3-6所示乌助,Hello World.字符串到下面的控制臺溜在。
圖3-6 運(yùn)行結(jié)果
3.2 文本編輯工具+JDK實(shí)現(xiàn)
如果不想使用IDE工具(筆者建議出學(xué)者通過這種方式學(xué)習(xí)Java),那么文本編輯工具+JDK對于初學(xué)者而言是一個不錯的選擇他托,這種方式可以使初學(xué)者了解到Java程序的編譯和運(yùn)行過程掖肋,通過自己在編輯器中敲入所有代碼,可以幫助熟悉常用類和方法赏参。
注意 在2.3.3節(jié)介紹過EditPlus與JDK集成過程志笼,2.3.3節(jié)集成方式有一個弊端是:不能執(zhí)行帶有包的Java應(yīng)用程序。
3.2.1 編寫源代碼文件
首先使用任何文本編輯工具創(chuàng)建一個文件把篓,然后將文件保存為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節(jié)打開命令行箍铲,如圖3-7所示,通過cd命令進(jìn)入到源文件所在的目錄鬓椭,然后執(zhí)行javac指令虹钮。如果沒有錯誤提示,說明編譯成功膘融,編譯成功則在當(dāng)前目錄下面生成類文件芙粱,如圖3-8所示生成了三個類文件,這是因?yàn)镠elloWorld.java源文件中定義了三個類氧映。
圖3-7 編譯源文件
圖3-8 編譯成功
上述編譯過程雖然成功了春畔,但是運(yùn)行時會有以下問題,這是由于HelloWorld.java源文件中定義了包c(diǎn)om.a51work6岛都,編譯應(yīng)該使用-d參數(shù)律姨,編譯指令如圖3-9所示。
圖3-9 編譯有包的源文件
編譯指令javac中的-d參數(shù)是指定類文件生成位置臼疫,-d后面跟的是一個目錄的路徑择份,本例中使用“.”點(diǎn)表示當(dāng)前目錄,編譯成功之后的目錄結(jié)果如下:
當(dāng)前目錄
│ HelloWorld.java
└─com
└─a51work6
A.class
B.class
HelloWorld.class
其中的com是目錄烫堤,它在當(dāng)前目錄的子目錄荣赶,a51work6也是目錄,它是com的子目錄鸽斟,可以包c(diǎn)om.a51work6會生成com\a51work6的目錄結(jié)構(gòu)拔创。
3.2.3 運(yùn)行程序
編譯成功之后就可以運(yùn)行了。執(zhí)行類文件需要在命令行中使用JDK的java指令富蓄,參考2.1.2節(jié)打開命令行剩燥,如圖3-10所示,通過cd命令進(jìn)入到源文件所在的目錄立倍,然后執(zhí)行java -classpath .;c:\com.a51work6.HelloWorld指令灭红,執(zhí)行成功在命令行窗口輸出Hello World!字符串。
圖3-10 運(yùn)行類文件
注意 java和javac指令都可以帶有-classpath(縮寫-cp)口注,它用來指定類路徑变擒,即搜索類的路徑,類似于操作系統(tǒng)中的path疆导,路徑之間用分號分隔赁项,其中點(diǎn)(.)表示當(dāng)前路徑葛躏。就本例而言運(yùn)行java程序HelloWorld所需要的全部類都在當(dāng)前路徑下澈段,因此只需要設(shè)置-classpath .就可以了悠菜,或者省略(當(dāng)前路徑不用指定)。
3.3 代碼解釋
經(jīng)過前文的介紹败富,讀者應(yīng)該能夠照貓畫虎悔醋,自己動手做一個Java應(yīng)用程序了。但還是對其中的一些代碼不甚了解兽叮,下面來詳細(xì)解釋一下HelloWorld示例中的代碼芬骄。
//包定義
package com.a51work6; ①
//類定義
public class HelloWorld { ②
//定義靜態(tài)main方法
public static void main(String[] args) { ③
System.out.print("Hello World."); ④
}
}
代碼第①行是定義類所在的包,package是關(guān)鍵字鹦聪,com.a51work6是包名账阻,包是一個命名空間,可以防止命名沖突問題泽本,關(guān)于包的概念將在后面章節(jié)詳細(xì)介紹淘太。
代碼第②行是定義類,public修飾符是聲明類是公有的规丽,class是定義類關(guān)鍵字蒲牧,HelloWorld是自定義的類名了,后面跟有“{…}”是類體赌莺,類體中會有成員變量和方法冰抢,也會有一些靜態(tài)變量和方法。
代碼第③行是定義靜態(tài)main方法艘狭,而作為一個Java應(yīng)用程序挎扰,類中必須包含靜態(tài)main方法,程序執(zhí)行是從main方法開始的巢音。main方法中除參數(shù)名args可以自定義外鼓鲁,其他必須嚴(yán)格遵守如下來兩種格式:
public static void main(String args[])
public static void main(String[] args)
這兩種格式本質(zhì)上就是一種,String args[]和String[] args都是聲明String數(shù)組港谊。另外骇吭,args參數(shù)是程序運(yùn)行時,通過控制臺向應(yīng)用程序傳遞字符串參數(shù)歧寺。
代碼第④行System.out.print("Hello World.");語句是通過Java輸出流(PrintStream)對象System.out打印Hello World.字符串燥狰,System.out是標(biāo)準(zhǔn)輸出流對象,它默認(rèn)輸出到控制臺斜筐。輸出流(PrintStream)中常用打印方法:
- print(String s) :打印字符串不換行龙致,有多個重載方法,可以打印任何類型數(shù)據(jù)顷链。
- println(String x) :打印字符串換行目代,有多個重載方法,可以打印任何類型數(shù)據(jù)。
- printf(String format, Object... args) :使用指定輸出格式榛了,打印任何長度的數(shù)據(jù)在讶,但不換行。
修改HelloWorld.java示例代碼如下:
public class HelloWorld {
public static void main(String[] args) {
//通過print打印第一個控制臺參數(shù)
System.out.print(args[0]); ①
//通過println打印第二個控制臺參數(shù)
System.out.println(args[1]); ②
//通過printf打印第三個控制臺參數(shù)霜大,%s表示格式化字符串
System.out.printf("%s", args[2]); ③
System.out.println();
int i = 123;
//%d表示格式化整數(shù)
System.out.printf("%d\n", i); ④
double d = 123.456;
//%f表示格式化浮點(diǎn)數(shù)
System.out.printf("%f%n", d); ⑤
System.out.printf("%5.2f", d); ⑥
}
}
編譯HelloWorld.java源代碼后构哺,通過如圖3-11所示,其中的java命令行后面的HelloWorld是要運(yùn)行的類文件战坤,Tony Hello World.是參數(shù)曙强,多個參數(shù)用空格分割。
圖3-11 在命令行中運(yùn)行程序
上述代碼第①行使用print方法打印第一個參數(shù)args[0]途茫,注意該方法是打印完成后面不換行碟嘴,從輸出結(jié)果中可見第一個參數(shù)Tony和第二個參數(shù)Hello連在一起了。代碼第②行使用println方法打印第二個參數(shù)args[1]囊卜,從輸出結(jié)果中可見第二個參數(shù)Hello后面是有換行的娜扇。
代碼第③、④边败、⑤袱衷、⑥行都是使用printf方法打印,注意printf方法后面是沒有換行的笑窜,想在后面換行可以通過System.out.println()語句實(shí)現(xiàn)致燥,或在打印第字符串后面添加換行符號(\n或%n),見代碼第④行和第⑤行排截。代碼第%5.2f也表示格式化浮點(diǎn)數(shù)嫌蚤,5表示總輸出的長度,2表示保留的小數(shù)位断傲。
本章小結(jié)
本章通過一個HelloWorld示例入手脱吱,介紹使用Eclipse和使用文本工具+JDK實(shí)現(xiàn)該示例具體過程。掌握Eclipse使用非常重要认罩,但是使用文本工具+JDK對于初學(xué)者也很有幫助箱蝠。最后詳細(xì)解釋了HelloWorld示例。
配套視頻
http://www.zhijieketang.com/classroom/6/courses
配套源代碼
http://www.zhijieketang.com/group/5