《Java從小白到大牛》之第3章 第一個Java程序

《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

與本書免費版對應的還有一個收費版本:

  1. 進入百度閱讀電子書

  2. 進入圖靈社區電子書

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容