- Java常用算法手冊(第3版)
- 宋娟
- 2809字
- 2020-06-23 15:32:48
1.6 Java程序的基本結構
Java語言的程序流由若干條語句組成。在此之前所編寫的程序都是一行一行的,由上而下,從左到右執行的。如果程序只能這樣執行,那么程序能做的工作將會受到限制。有時可能需要控制程序執行的過程,例如,重復執行某一程序段或當一個條件出現時才執行某一程序段,而這些變化可以通過流程控制結構的相應語句來完成。
三種基本的程序結構分別為順序結構、分支結構和循環結構。順序結構是每條代碼都按照先后順序被執行一次;分支結構是僅有部分代碼被執行一次;循環結構是部分代碼在某種條件下被反復執行。Java中還有一種特殊的程序結構稱為跳轉,可以用break或continue來改變程序的執行,實現跳轉。這些基本的程序結構語句,看起來很簡單,但其各種組合,一起構成了千變萬化的算法,所以,學習算法之外,還要掌握一種實現算法的程序語言基本語句。本書講解的是Java,讀者也可以把它們轉化成其他程序設計語言。
1.6.1 類是一個基本單元
編寫程序,特別是閱讀程序之前,首先需要了解程序的基本結構和組成單元,以方便剖析代碼的組成。Java是面向對象的編程語言,不同于Pascal、C等面向過程的編程語言。面向對象編程用不同的方法分析和解決問題。熟悉C語言的讀者在用Java編程時不能照搬傳統的面向過程的求解問題的方法,而必須先將自己的思想轉入一個面向對象的世界。但這種轉變比較難,讀者首先需要熟悉面向對象設計和編程的基本思想和基本概念。
面向對象編程(Object Oriented Programming,簡稱OOP)用與現實世界更一致、與人的思維模式更一致的方法來分析解決問題。面向對象編程的核心是“對象”。在現實世界中,人們無時無刻不與對象打交道。例如,磁盤、電視機、汽車、輪胎、人等,這一切都是對象。對象有兩個基本特點:狀態和行為。例如,汽車有質量、顏色和速度等狀態,也有啟動、轉彎、加速等操作;人有獨特的狀態:名字、高矮、性別、健康等,而且還具有行走、休息和工作等行為。軟件對象根據現實世界的對象建立,既可以表示現實世界中的事物,也可以表示事件。
在面向對象編程中,有很多對象共享某些屬性和方法。可以利用同一類的對象共享一些屬性和方法的特點,創造一個創建對象的母體。這種軟件母體稱為類。也就是說,類是定義同一類對象的屬性和方法的藍圖或原形,對象是類的一個實例。
Java提供了幾千種類,有的用于圖形界面設計,有的用于數據庫操作,有的用于網絡編程等。另外,應用開發人員為解決實際問題也可創建用戶自定義類。
類是面向對象程序的基本要素。它包含兩個部分:類說明和類的主體。
類的定義格式如下:

與C++不同,Java中即使是一個最簡單的程序也必須寫成類。而C++中,簡單的程序中完全可以不出現類,寫一個main函數就可以了。要注意Java和C++在這一點上的區別。
說明:類的說明部分是用戶可見部分。在這個部分對類的一些性質進行聲明,包括類的修飾符、類名等。
(1)修飾符:是影響類生存空間和可訪問性的關鍵字。常用的一種修飾符是public。它表示允許其他任何類訪問。修飾符缺省時,這個類稱為友好類。
(2)類名:緊跟在關鍵字class之后,類名的命名要符合Java標識符的命名規則,類的主體由兩部分構成:變量定義和方法定義。變量用來描述屬性,方法用來描述行為。類實體跟在類的聲明之后,用一對花括號{}界定。
1.6.2 main方法
在C++程序中,main方法的聲明可以是int main()或void main(),相對比較靈活。而在Java中,main方法作為Java應用程序的入口,寫法基本是固定的,例如:
public static void main(String args[])
唯一可以做修改的是main方法中傳遞的字符數組的名稱,可以不用args的名稱。還有,按照Java語言的約定,聲明數組時方括號也可以緊跟類型。main方法還可以寫成:
public static void main(String[] yourName)
實際上不管上面的哪種寫法,可以看到:
(1)main方法必須定義成public,即公有的;
(2)main方法必須定義成static,即靜態方法;
(3)main方法的返回類型固定為void;
(4)main方法接收一個字符串數組作為參數。
讀者在剛開始學習Java時,可能覺得main方法的書寫太煩瑣,多寫一些程序后,逐步就會習慣了。main方法的固定寫法,必須要牢記。而當以后使用集成開發環境后,寫main方法相對就比較簡單。在NetBeans中,輸入psvm后按展開模板鍵(默認是Tab鍵,可以設置為空格鍵或Enter鍵),就可以自動填充main方法。
1.6.3 自定義方法
軟件對象是變量和方法的集合。根據現實世界的對象建立,軟件對象與客觀世界的對象存在著一一對應的映射關系。面向對象語言用變量描述對象的狀態,用方法描述對象的行為。
方法聲明的基本格式如下:

方法聲明的第一行是方法頭。
(1)方法名是一個標識符。參數列表用圓括號界定,參數之間用逗號分隔。每個參數由參數類型和參數名組成。參數類型可以是基本數據類型,也可以是類。
(2)方法名前必須指明方法返回值的類型。返回值類型可以是基本類型或引用類型。若方法無返回值,則返回值類型是void。一個方法最多返回一個值。若方法需要返回計算結果,可用帶表達式的return語句。若無返回值,可以不用return語句,或者使用不帶表達式的return語句,即:
return;
(3)參數表由0個或多個參數構成。每個參數包括參數類型和參數名。參數類型可以是基本類型,也可以是引用類型。
(4)修飾符是可選項,public和private是常用的修飾符。在方法頭后面是方法體,由花括號界定方法體,包括變量聲明和語句。
方法體中聲明的變量是局部變量,只有在該方法內才有效。如果局部變量與類的成員變量同名,則局部變量屏蔽類的成員變量。局部變量和成員變量的另一個區別是,成員變量有默認值,而局部變量卻沒有。
1.6.4 System.out.println的使用
System是位于java.lang包下的一個常用類。java.lang包稱為Java的核心包,在這個包下的類可以直接使用,無須使用import語句導入。System類提供了很多的常用方法,如currentTimeMillis方法可以得到時間信息,getProperties方法可以得到當前計算機系統的相關信息。System類中有一個靜態的對象out,out是PrintStream的對象,提供了print和println這樣的常用方法,用于在控制臺上輸出信息。具體要在控制臺上輸出信息時,使用“System.out.println(參數);”的語法形式即可。
此外,為了在控制臺得到輸出結果,也可以使用“System.out.print(參數);”的語法形式。這里使用的print方法與println方法的區別是:print在顯示參數后,并不將光標移動到下一行的開頭,而println()在顯示參數后,自動將光標位置移到下一行(與文本編輯器里按Enter鍵類似)。此外Java也可以使用System.out.printf()完成數據的輸出,該用法完全類似于C語言的printf函數。System.out.printf()的一般格式如下:
System.out.printf(格式控制部分,表達式1,表達式2,…);
格式控制部分由普通字符和%d、%s、%f、%ld之類的格式控制符號組成,普通字符原樣輸出,格式符號用來輸出表達式的值。例如:
System.out.printf("%d和%d的和為:",a,b,a+b);
1.6.5 一個簡單而完整的程序
編寫Java程序,打印幾個特定字符的ACSII碼,包括數字0和9,大寫字母A和Z,小寫字母a和z。
【程序1-2】


【分析】程序中dispAscii方法的聲明為public void dispAscii(char ch),它的功能是接收一個字符類型的變量,將這個字符對應的ASCII碼打印在控制臺上。此方法不是靜態(static)方法,因此,應該使用“對象名.方法名(參數)”的語法形式來調用。在調用println方法時,使用了加號將多個部分連接起來。
打印特定字符的ASCII碼如圖1-21所示。

圖1-21 打印特定字符的ASCII碼