4.1.2多 分 支 語 句 switch
switch 語句根據(jù)表達式的值來執(zhí)行多個操作中的一個,它的一般格式如下 :
switch (expression){
case value1 : statement1;
break;
case value2 : statement2;
break;
…………
case valueN : statemendN;
break;
[default : defaultStatement; ]
}
1.表達式expression可以返回任一簡單類型的值(如整型、 實型、 字符型 ),多分支語句把表達式返回的與每個case子句中的值相比。 如果匹配成功,則執(zhí)行該case子句后的語序列 。
2.case子句中的值valueI必須是常量,而且所有case子句中的值應(yīng)是不同的 。
3.default子句是任選的。 當表達式的值與任一 case子句中的值都不匹配時 ,程序執(zhí)行 default后面的語句。如果表達式的值與任一case子句中的值都不匹配且沒有default子句 ,則程序不作任何操作,而是直接跳出 switch語句。
4.break語句用來在執(zhí)行完一個case分支后,使程序跳出switch語句,即終止switch語句的執(zhí)行。因為case子句只是起到一個標號的作用,用來查找匹配的入口并從此處開始執(zhí)行 ,對后面 的case子句不再進行匹配,而是直接執(zhí)行其后的語句序列, 因此應(yīng)該在每個case分支后,要用 break來終止后面的case分支語句的執(zhí)行。 在一些特殊情況下,多個不同的case值要執(zhí)行一組相同的操作,這時可以不用break。
5.case分支中包括多個執(zhí)行語句時,可以不用大括號 {}括起 。
6.switch語句的功能可以用 if-else來實現(xiàn),但在某些情況下,使用switch語句更簡煉,可讀性強,而且程序的執(zhí)行效率提高 。
7.舉 例 :
例 4.3.根 據(jù) 考 試 成 績 的 等 級 打 印 出 百 分 制 分 數(shù) 段 。
public class GradeLevel
{
public static void main( String args[] )
{
System.out.println("\n** first situation **");
char grade='C'; //normal use
switch( grade )
{
case 'A' : System.out.println(grade+" is 85~100");
break;
case 'B' : System.out.println(grade+" is 70~84");
break;
case 'C' : System.out.println(grade+" is 60~69");
break;
case 'D' : System.out.println(grade+" is <60");
break;
default : System.out.println("input error");
}
System.out.println("\n** second situation **");
grade='A'; ∥creat error without break statement
switch( grade )
{
case 'A' : System.out.println(grade+" is 85~100");
case 'B' : System.out.println(grade+" is 70~84");
case 'C' : System.out.println(grade+" is 60~69");
case 'D' : System.out.println(grade+" is <60");
default : System.out.println("input error");
}
System.out.println("\n** third situation **");
grade='B'; ∥several case with same operation
switch( grade )
{
case 'A' :
case 'B' :
case 'C' : System.out.println(grade+" is >=60");
break;
case 'D' : System.out.println(grade+" is <60");
break;
default : System.out.println("input error");
}
}
}
運行結(jié)果為
C:\>java GradeLevel
**** first situation ****
C is 60~69
**** second situation ****
A is 85~100
A is 70~84
A is 60~69
A is <60
input error
**** third situation ****
B is >=60
從 該 例 中 我 們 可 以 看 到 break語 句 的 作 用 。
4.1.3 break語句
1.在 switch語中,break語句用來終止switch語句的執(zhí)行。 使程序從switch語句后的第一個語句開始執(zhí)行 。
2.在Java中,可以為每個代碼塊加一個括號,一個代碼塊通常是用大括號 {}括起來的一段代碼。加標號的格式如下 :
BlockLabel: { codeBlock }
break語句的第二種使用情況就是跳出它所指定的塊 ,并從緊跟該塊的第一條語句處執(zhí) 行 。 其格式為 :
break BlockLabel;
例如:
a:{…… //標記代碼塊a
b: {…… //標記代碼塊b
c: {…… //標記代碼塊c
break b;
…… //will not be executed
}
…… //will not be executed
}
…… /execute from here
}
3.與C、 C++不同,Java中沒有g(shù)oto語句來實現(xiàn)任意的跳轉(zhuǎn),因為 goto語句破壞程序的可讀性 ,而且影響編譯的優(yōu)化 。 但是從上例可以看出 ,Java用break來實現(xiàn)goto語句所特有的一些優(yōu)點。如果break后所指定的標號不是一個代碼塊的標號,而是一個語句,則這時break完全實現(xiàn)goto的功能。 不過應(yīng)該避免這種方式的使用 。
4.1.4返回語句return
return語句從當前方法中退出,返回到調(diào)用該方法的語句處, 并從緊跟該語句的下一條語句繼續(xù)程序的執(zhí)行 。 (有 關(guān) 方 法 的 內(nèi) 容 ,我 們 將在第六章詳細講述。 前面例子中的main( )就是一個方法 )。 返 回 語 句有兩種格式 :
1.return expression
返回一個值給調(diào)用該方法的語句 ,返回值的數(shù)據(jù)類型必須和方法聲明中的返回值類型一致??梢允褂脧娭祁愋娃D(zhuǎn)換來使類型一 致 。
2.return
當方法說明中用void聲明返回類型為空時 ,應(yīng)使用這種格式 ,它不返回任何值 。
return 語句通常用在一個方法體的最后,以退出該方法并返回一個值 。 Java中單獨的return語句用在一個 方 法 體的中間時,會產(chǎn)生編譯錯誤,因為這時會有一些語句執(zhí)行不到 。 但可以通過把 return語句嵌入某些語句 (如 if-else)來使程序在未執(zhí)行完方法中的所有語句時退出。例如 :
int method (int num)
{
∥ return num; ∥will cause compile time error
if (num>0)
return num;
…… ∥ may or may not be executed
∥depending on the value of num

