<b>第3章 java的基本程式設計結構</b>
<b>▲ 一個簡單的java應用程式 ▲ 字元串</b>
<b></b>
<b>▲ 注釋 ▲ 輸入輸出</b>
<b>▲ 資料類型 ▲ 控制流</b>
<b>▲ 變量 ▲ 大數值</b>
<b>▲ 運算符 ▲ 數組</b>
現在,假定已經成功地安裝了jdk,并且能夠運作第2章中給出的示例程式。我們從現在開始将介紹java應用程式設計。本章主要介紹程式設計的基本概念(如資料類型、分支以及循環)在java中的實作方式。
非常遺憾,需要告誡大家,使用java編寫gui應用程式并不是一件很容易的事情,程式設計者需要掌握很多相關的知識才能夠建立視窗、添加文本框以及能響應的按鈕等。介紹基于gui的java應用程式設計技術與本章将要介紹的程式設計基本概念相差甚遠,是以本章給出的所有示例都是為了說明一些相關概念而設計的“玩具式”程式,它們僅僅使用終端視窗提供輸入輸出。
最後需要說明,對于一個有c++程式設計經驗的程式員來說,本章的内容隻需要浏覽一下,應該重點閱讀散布在正文中的c/c++注釋。對于具有使用visual
basic等其他程式設計背景的程式員來說,可能會發現其中的絕大多數概念都很熟悉,但是在文法上有比較大的差異,是以,需要非常仔細地閱讀本章的内容。
<b>3.1 一個簡單的java應用程式</b>
下面看一個最簡單的java應用程式,它隻發送一條消息到控制台視窗中:
這個程式雖然很簡單,但所有的java應用程式都具有這種結構,還是值得花一些時間來研究。首先,java區分大小寫。如果出現了大小寫拼寫錯誤(例如,将main拼寫成main),程式将無法運作。
下面逐行地檢視一下這段源代碼。關鍵字public稱為通路修飾符(access modif?ier),這些修飾符用于控制程式的其他部分對這段代碼的通路級别。在第5章中将會更加詳細地介紹通路修飾符的具體内容。關鍵字class表明java程式中的全部内容都包含在類中。這裡,隻需要将類作為一個加載程式邏輯的容器,程式邏輯定義了應用程式的行為。在第4章中将會用大量的篇幅介紹java類。正如第1章所述,類是建構所有java應用程式和applet的建構塊。java應用程式中的全部内容都必須放置在類中。
關鍵字class後面緊跟類名。java中定義類名的規則很寬松。名字必須以字母開頭,後面可以跟字母和數字的任意組合。長度基本上沒有限制。但是不能使用java保留字(例如,public或class)作為類名(保留字清單請參看附錄a)。
标準的命名規範為(類名firstsample就遵循了這個規範):類名是以大寫字母開頭的名詞。如果名字由多個單詞組成,每個單詞的第一個字母都應該大寫(這種在一個單詞中間使用大寫字母的方式稱為駱駝命名法。以其自身為例,應該寫成camelcase)。
源代碼的檔案名必須與公共類的名字相同,并用.java作為擴充名。是以,存儲這段源代碼的檔案名必須為firstsample.java(再次提醒大家注意,大小寫是非常重要的,千萬不能寫成f?irstsample.java)。
如果已經正确地命名了這個檔案,并且源代碼中沒有任何錄入錯誤,在編譯這段源代碼之後就會得到一個包含這個類位元組碼的檔案。java編譯器将位元組碼檔案自動地命名為firstsample.
class,并與源檔案存儲在同一個目錄下。最後,使用下面這行指令運作這個程式:
(請記住,不要添加.class擴充名。)程式執行之後,控制台上将會顯示“we will not use ‘hello,world’!”。
當使用
運作已編譯的程式時,java虛拟機将從指定類中的main方法開始執行(這裡的“方法”就是java中所說的“函數”),是以為了代碼能夠執行,在類的源檔案中必須包含一個main方法。當然,也可以将使用者自定義的方法添加到類中,并且在main方法中調用它們(第4章将講述如何自定義方法)。
注釋:根據java語言規範,main方法必須聲明為public(java語言規範是描述java語言的官方文檔。可以從網站http://docs.oracle.com/javase/specs上閱讀或下載下傳)。
不過,當main方法不是public時,有些版本的java解釋器也可以執行java應用程式。有個程式員報告了這個bug。如果感興趣的話,可以在網站http://bugs.java.com/
bugdatabase/ index.jsp上輸入bug号碼4252539檢視。這個bug被标明“關閉,不予修複。”sun公司的工程師解釋說:java虛拟機規範(在http://docs.oracle.com/javase/specs/jvms/se8/html)并沒有要求main方法一定是public,并且“修複這個bug有可能帶來其他的隐患”。好在,這個問題最終得到了解決。在java se 1.4及以後的版本中強制main方法是public的。
從上面這段話可以發現一個問題的兩個方面。一方面讓品質保證工程師判斷在bug報告中是否存在問題是一件很頭痛的事情,這是因為其工作量很大,并且工程師對java的所有細節也未必了解得很清楚。另一方面,sun公司在java開源很久以前就把bug報告及其解決方案放到網站上讓所有人監督檢查,這是一種非常了不起的舉動。某些情況下,sun甚至允許程式員為他們最厭惡的bug投票,并用投票結果來決定釋出的下一個jdk版本将修複哪些bug。
需要注意源代碼中的括号{ }。在java中,像在c/c++中一樣,用大括号劃分程式的各個部分(通常稱為塊)。java中任何方法的代碼都用“{”開始,用“}”結束。
大括号的使用風格曾經引發過許多無意義的争論。我們的習慣是把比對的大括号上下對齊。不過,由于空白符會被java編譯器忽略,是以可以選用自己喜歡的大括号風格。在下面講述各種循環語句時,我們還會詳細地介紹大括号的使用。
我們暫且不去理睬關鍵字static void,而僅把它們當作編譯java應用程式必要的部分就行了。在學習完第4章後,這些内容的作用就會揭曉。現在需要記住:每個java應用程式都必須有一個main方法,其聲明格式如下所示:
c++注釋:作為一名c++程式員,一定知道類的概念。java的類與c++的類很相似,但還是有些差異會使人感到困惑。例如,java中的所有函數都屬于某個類的方法(标準術語将其稱為方法,而不是成員函數)。是以,java中的main方法必須有一個外殼類。讀者有可能對c++中的靜态成員函數(static member functions)十分熟悉。這些成員函數定義在類的内部,并且不對對象進行操作。java中的main方法必須是靜态的。最後,與c/c++一樣,關鍵字void表示這個方法沒有傳回值,所不同的是main方法沒有為作業系統傳回“退出代碼”。如果main方法正常退出,那麼java應用程式的退出代碼為0,表示成功地運作了程式。如果希望在終止程式時傳回其他的代碼,那就需要調用system.exit方法。
接下來,研究一下這段代碼:
一對大括号表示方法體的開始與結束,在這個方法中隻包含一條語句。與大多數程式設計語言一樣,可以将java語句看成是這種語言的句子。在java中,每個句子必須用分号結束。特别需要說明,回車不是語句的結束标志,是以,如果需要可以将一條語句寫在多行上。
在上面這個main方法體中隻包含了一條語句,其功能是:将一個文本行輸出到控制台上。
在這裡,使用了system.out對象并調用了它的println方法。注意,點号(·)用于調用方法。java使用的通用文法是
這等價于函數調用。
在這個示例中,調用了println方法并傳遞給它一個字元串參數。這個方法将傳遞給它的字元串參數顯示在控制台上。然後,終止這個輸出行,使得每次調用println都會在新的一行上顯示輸出。需要注意一點,java與c/c++一樣,都采用雙引号分隔字元串。(本章稍後将會詳細地講解有關字元串的知識)。
與其他程式設計語言中的函數一樣,在java的方法中,可以沒有參數,也可以有一個或多個參數(有的程式員把參數叫做實參)。對于一個方法,即使沒有參數也需要使用空括号。例如,不帶參數的println方法隻列印一個空行。使用下面的語句來調用:
注釋:system.out還有一個print方法,它在輸出之後不換行。例如,system.out.print(“hello”)列印“hello”之後不換行,後面的輸出緊跟在字母“o”之後。