4.1.2多 分 支 語 句 switch
switch 語句根據(jù)表達(dá)式的值來執(zhí)行多個(gè)操作中的一個(gè),它的一般格式如下 :
switch (expression){
case value1 : statement1;
break;
case value2 : statement2;
break;
…………
case valueN : statemendN;
break;
[default : defaultStatement; ]
}
1.表達(dá)式expression可以返回任一簡(jiǎn)單類型的值(如整型、 實(shí)型、 字符型 ),多分支語句把表達(dá)式返回的與每個(gè)case子句中的值相比。 如果匹配成功,則執(zhí)行該case子句后的語序列 。
2.case子句中的值valueI必須是常量,而且所有case子句中的值應(yīng)是不同的 。
3.default子句是任選的。 當(dāng)表達(dá)式的值與任一 case子句中的值都不匹配時(shí) ,程序執(zhí)行 default后面的語句。如果表達(dá)式的值與任一case子句中的值都不匹配且沒有default子句 ,則程序不作任何操作,而是直接跳出 switch語句。
4.break語句用來在執(zhí)行完一個(gè)case分支后,使程序跳出switch語句,即終止switch語句的執(zhí)行。因?yàn)閏ase子句只是起到一個(gè)標(biāo)號(hào)的作用,用來查找匹配的入口并從此處開始執(zhí)行 ,對(duì)后面 的case子句不再進(jìn)行匹配,而是直接執(zhí)行其后的語句序列, 因此應(yīng)該在每個(gè)case分支后,要用 break來終止后面的case分支語句的執(zhí)行。 在一些特殊情況下,多個(gè)不同的case值要執(zhí)行一組相同的操作,這時(shí)可以不用break。
5.case分支中包括多個(gè)執(zhí)行語句時(shí),可以不用大括號(hào) {}括起 。
6.switch語句的功能可以用 if-else來實(shí)現(xiàn),但在某些情況下,使用switch語句更簡(jiǎn)煉,可讀性強(qiáng),而且程序的執(zhí)行效率提高 。
7.舉 例 :
例 4.3.根 據(jù) 考 試 成 績(jī) 的 等 級(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");
}
}
}
運(yùn)行結(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語句后的第一個(gè)語句開始執(zhí)行 。
2.在Java中,可以為每個(gè)代碼塊加一個(gè)括號(hào),一個(gè)代碼塊通常是用大括號(hào) {}括起來的一段代碼。加標(biāo)號(hào)的格式如下 :
BlockLabel: { codeBlock }
break語句的第二種使用情況就是跳出它所指定的塊 ,并從緊跟該塊的第一條語句處執(zhí) 行 。 其格式為 :
break BlockLabel;
例如:
a:{…… //標(biāo)記代碼塊a
b: {…… //標(biāo)記代碼塊b
c: {…… //標(biāo)記代碼塊c
break b;
…… //will not be executed
}
…… //will not be executed
}
…… /execute from here
}
3.與C、 C++不同,Java中沒有g(shù)oto語句來實(shí)現(xiàn)任意的跳轉(zhuǎn),因?yàn)?goto語句破壞程序的可讀性 ,而且影響編譯的優(yōu)化 。 但是從上例可以看出 ,Java用break來實(shí)現(xiàn)goto語句所特有的一些優(yōu)點(diǎn)。如果break后所指定的標(biāo)號(hào)不是一個(gè)代碼塊的標(biāo)號(hào),而是一個(gè)語句,則這時(shí)break完全實(shí)現(xiàn)goto的功能。 不過應(yīng)該避免這種方式的使用 。
4.1.4返回語句return
return語句從當(dāng)前方法中退出,返回到調(diào)用該方法的語句處, 并從緊跟該語句的下一條語句繼續(xù)程序的執(zhí)行 。 (有 關(guān) 方 法 的 內(nèi) 容 ,我 們 將在第六章詳細(xì)講述。 前面例子中的main( )就是一個(gè)方法 )。 返 回 語 句有兩種格式 :
1.return expression
返回一個(gè)值給調(diào)用該方法的語句 ,返回值的數(shù)據(jù)類型必須和方法聲明中的返回值類型一致。可以使用強(qiáng)制類型轉(zhuǎn)換來使類型一 致 。
2.return
當(dāng)方法說明中用void聲明返回類型為空時(shí) ,應(yīng)使用這種格式 ,它不返回任何值 。
return 語句通常用在一個(gè)方法體的最后,以退出該方法并返回一個(gè)值 。 Java中單獨(dú)的return語句用在一個(gè) 方 法 體的中間時(shí),會(huì)產(chǎn)生編譯錯(cuò)誤,因?yàn)檫@時(shí)會(huì)有一些語句執(zhí)行不到 。 但可以通過把 return語句嵌入某些語句 (如 if-else)來使程序在未執(zhí)行完方法中的所有語句時(shí)退出。例如 :
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