- Java語言GUI程序設計
- 趙滿來
- 2886字
- 2019-12-06 14:22:09
3.3 表達式和語句
表達式是由常量、變量、對象、方法調用等操作數與運算符結合形成的運算式,按照操作符的功能對操作數進行運算并返回運算結果。如果在表達式后加上分號,就形成表達式語句。例如,yourAge=age+5、age+1、var1 *= age+5、ans = x<y &&yn、a = a>>2、jTextField1.setText("" + 234.12f)、36%2==1 ? "36是奇數" : "36是偶數"等都是表達式。
3.3.1 運算符按元數分類
根據操作數組成表達式時所需要的操作數個數,運算符可以分為以下三類。
(1)一元運算符:只需要一個操作數的運算符。包括:+(正值)、?(負值)、++、? ?、!、~。
(2)三元運算符:需要三個操作數的運算符。只有條件運算符?:是三元運算符。
(3)二元運算符:需要兩個操作數的運算符。除了一元運算符和三元運算符以外,其他的都是二元運算符。
3.3.2 運算符的結合性
一個表達式中可能有多個運算符,那么居于兩個運算符之間的操作數到底先跟哪個運算符結合進行運算就取決于運算符與操作數的結合方向,這就是運算符的結合性。
Java運算符的結合性分為兩種:右結合性和左結合性。
右結合性:操作數與運算符自右向左結合。這種運算符包括所有一元運算符、賦值及所有復合賦值運算符、new、(類型)。
左結合性:操作數與運算符自左向右結合。除了右結合性運算符之外的其余所有運算符都是左結合性。
3.3.3 運算符的優先級
優先級是多個運算符同時出現在一個表達式中時,運算的先后順序。由多個運算符和操作數構成的表達式中,到底先計算什么,后計算什么,這要依據運算符的結合性和優先級來共同確定。
表3.7列出了Java語言運算符的優先級和結合性,表中運算符優先級編號越小其優先級越高。例如,對于整型變量x、y及布爾型變量z,表達式“x > y && ! z”的運算次序是:邏輯取反運算符“!”的優先級最高,且為右結合性,所以先將變量z與“!”結合優先計算,隨后關系運算符“>”比邏輯運算符“&&”優先級高且是左結合性,應計算“x > y”,最后計算邏輯運算符“&&”。再如,表達式a >> b + 3,加號“+”的優先級比位右移運算符“>>”高,先計算b + 3,再執行a的位右移運算。
表3.7 Java語言運算符的優先級和結合性

3.3.4 類型轉換
在表達式中同時出現不同類型的操作數時,會涉及類型之間的轉換,轉換結果的類型就是表達式的類型。類型轉換也稱“造型”(Cast)。除了boolean和void類型之外,Java語言允許將任意一種基本類型轉換為另一種基本類型。有以下兩種轉換方式。
1. 自動類型轉換
在表達式中出現了占用不同大小存儲空間的變量或常量時,Java編譯器會自動將占用存儲空間小的類型轉換為占用存儲空間大的類型。這種放大轉換不會損失原類型變量或常量的任何信息,是一種安全的操作。轉換方向是由低到高:
byte→short→char→int→float→double
例如,以下程序段會自動將int型量轉換為long類型的量:
int i = 200; long l = i; // Java自動將變量i轉換為long類型,然后賦值給變量l long l2 = 200; // Java自動將int型常量200轉換為long類型,然后賦值給變量l2
2. 強制類型轉換
如果需要將占用存儲空間大的類型的量轉換為占用存儲空間小的類型的量,就可能面臨信息丟失的危險。此時,編譯器會強迫程序進行強制類型轉換。強制類型轉換使用運算符“(目標類型)”進行。例如,以下程序段:
long l = 200L; int i = (int)l ; //程序強制將變量l轉換為int類型,然后賦值給變量i int i2 = 200.0; //編譯程序時會出現錯誤,不能通過編譯 int i3 = (int)200.0f; //程序強制將float型常量200.0f轉換為int類型再賦值給變量i3
3.3.5 語句
Java程序由一條條語句構成,每一條Java語句都指示計算機完成特定運算或操作。本質上,Java程序是逐條語句執行的,執行完一條語句后接著執行下一條語句??梢酝ㄟ^改變語句位置而改變語句的執行順序。
Java程序的一條語句是由分號作為結束符,可以在一行或多行輸入,也可以一行輸入多條語句。最簡單的一條Java語句就是一個分號“;”,稱為空語句,可以作為占位符,或用于消耗計算機執行時間而延時。
在表達式后加上分號,就形成表達式語句。
1. 復合語句
將多條語句用大括號({ })括起來可以形成一條復合語句(也稱為語句塊)。在一對大括號內聲明的變量只能在這對大括號范圍內使用,超出這個范圍就不再有效,這個范圍稱為變量的作用域。且大括號可以嵌套,即一對大括號內可以有另外一對大括號,例如:

2. 注釋語句
注釋語句對程序的執行不起作用,但是對于程序開發和后期維護很有幫助。因此,在初學Java程序設計時應該養成使用注釋的良好習慣。
Java語言提供了兩種類型的注釋語句。第一種注釋用一個“/*”起頭,隨后是注釋內容,并可跨越多行,最后用一個“*/”結束。許多程序員習慣在連續注釋內容的每一行都用一個“*”開頭,這種注釋像下面這樣:
/* 這是 * 一段注釋, * 它跨越了多個行 */
第二種類型的注釋叫作“單行注釋”,是以一個“//”起頭,表示這一行的所有內容都是注釋。也可以在一條執行語句行后接著以“//”開始注釋,稱為行內注釋。這種類型的注釋更常用,因為它書寫時更方便。下面便是這類注釋的一個例子:
// 這是一條單行注釋
程序開發的過程中需要編寫相應的文檔以實現程序文檔化,這是程序后期維護的重要基礎。Java程序可以將代碼和文檔鏈接起來,在程序源文件中同時編寫代碼和文檔。為此,Java語言使用了一種特殊的注釋語法,以便標記出文件中的文檔內容;另外還提供一個工具——javadoc,用于提取這些注釋及毗鄰注釋的類名或方法名,以HTML格式生成十分專業的程序文檔。程序文檔可方便地用Web瀏覽器查看。
Java程序中的文檔注釋及命令都只能出現于以“/**”開始,以“*/”結束的注釋塊中。其中的“文檔標記”是一些以“@”開頭的命令,置于注釋行的起始處(但前導的“*”會被忽略)。
有三種類型的注釋文檔,它們對應于位于注釋后面的元素:類、變量或者方法。也就是說,一個類注釋正好位于一個類定義之前;變量注釋正好位于變量定義之前;而一個方法注釋正好位于一個方法定義的前面。如下面這個簡單的例子所示:
/** 一個類注釋 */ public class docTest { /** 一個變量注釋 */ public int i; /** 一個方法注釋 */ public void f() {} }
常用的文檔注釋命令如下。
@version版本信息:其中,“版本信息”代表任何適合作為版本說明的資料。
@author作者信息:其中,“作者信息”包括作者的姓名、電子函件地址或者其他任何適宜的資料。
@param方法的參數名說明:其中,“參數名”是指參數列表內的標識符,而“說明”代表一些可延續到后續行內的說明文字。
@return方法的返回值說明:其中,“說明”是指返回值的含義。
@exception完整類名說明:其中,“完整類名”明確指定了一個異常類的名字,它是在其他某個地方定義好的;而“說明”指出為什么這種特殊類型的異常會在方法調用中出現。
3. 流程控制語句
程序的流程是指程序中語句執行的次序。Java語言提供了完善的流程控制語句,而且隨著JDK版本的逐步提升還陸續補充和完善了一些流程控制語句。流程控制語句是程序設計語言中基本而又關鍵的部分,Java語言通過流程控制語句,將有關語句組織成一些完成特定功能的邏輯程序塊。
Java程序中語句的執行流程有以下三種。
(1)順序流程:按照語句在程序中編寫的先后順序逐條執行,一條語句執行完接著執行相鄰的下一條語句。
(2)分支流程:又稱選擇結構,是在多條執行路徑中根據一定的條件選擇其中一條路徑執行的流程。
(3)循環流程:在一定的條件下,反復執行一段程序塊的執行流程。被反復執行的程序段稱為循環體,決定是否繼續執行循環體的條件稱為循環控制條件。