Java編程中的條件判斷之if語句的用法詳解
if語句使用布爾表達(dá)式或布爾值作為分支條件來進(jìn)行分支控制,其中if語句有如下三種形式:
第一種形式:
if ( logic expression )
{
statements…
}
第二種形式:
if (logic expression)
{
statements…
}
else
{
statements…
}
第三種形式:
if (logic expression)
{
statements…
}
else if(logic expression)
{
statements…
}
…//可以有零個(gè)或多個(gè)else if語句
else//最后的else語句也可以省略
{
statement
}
在上面if語言的三種形式中,放在if之后的括號(hào)里的只能是一個(gè)邏輯表達(dá)式,即這個(gè)表達(dá)式的返回值只能是true或false.第二種情形和第三種情形是相通的,如果第三種形式中else if塊不出現(xiàn),則變成了第二種形式。
上面的條件語句中,if(logic expression)、else if(logic expression)以及else后花括號(hào)括起來多行代碼被稱為代碼塊,一個(gè)代碼塊通常被當(dāng)成一個(gè)整體來執(zhí)行(除非運(yùn)行過程中遇到return、break、continue等關(guān)鍵字,或者遇到了異常),因此這個(gè)代碼塊也被稱為條件執(zhí)行體。例如如下程序:
程序清單:codes/04/4-2/TestIf.java
public class TestIf
{
public static void main(String[] args)
{
int age = 30;
if (age > 20)
//只有當(dāng)age > 20時(shí),下面花括號(hào)括起來的語句塊才會(huì)執(zhí)行
//花括號(hào)括起來的語句是一個(gè)整體,要么一起執(zhí)行,要么一起不會(huì)執(zhí)行
{
System.out.println("年齡已經(jīng)大于20歲了");
System.out.println("20歲以上的人應(yīng)該學(xué)會(huì)承擔(dān)責(zé)任…");
}
}
}
因此,如果if(logic expression)、else if(logic expression)和else后的語句塊只有一行語句時(shí),則可以省略花括號(hào),因?yàn)閱涡姓Z句本身就是一個(gè)整體,無須花括號(hào)來把它們定義成一個(gè)整體。下面代碼完全可以正常執(zhí)行(程序清單同上):
//定義變量a ,并為其賦值 int a = 5; if (a > 4) //如果a>4,執(zhí)行下面的執(zhí)行體,只有一行代碼作為代碼塊 System.out.println("a大于4"); else //否則,執(zhí)行下面的執(zhí)行體,只有一行代碼作為代碼塊 System.out.println("a不大于4");
通常,我們建議不要省略if、else、else if后執(zhí)行塊的花括號(hào),即使條件執(zhí)行體只有一行代碼,因?yàn)楸A艋ɡㄌ?hào)會(huì)有更好的可讀性,而且保留花括號(hào)會(huì)減少發(fā)生錯(cuò)誤的可能,例如如下代碼,則不可正常執(zhí)行:
//定義變量b ,并為其賦值 int b = 5; if (b > 4) //如果b>4,執(zhí)行下面的執(zhí)行體,只有一行代碼作為代碼塊 System.out.println("b大于4"); else //否則,執(zhí)行下面的執(zhí)行體 b--; //對(duì)于下面代碼而言,它已經(jīng)不再是條件執(zhí)行體的一部分,因此總會(huì)執(zhí)行 System.out.println("b不大于4");
上面代碼中以粗體字標(biāo)識(shí)的代碼行:System.out.println("b不大于4");,將總是會(huì)執(zhí)行,因?yàn)檫@行代碼并不屬于else后的條件執(zhí)行體,else后的條件執(zhí)行體就是b--;這行代碼。
if、else、else if后條件執(zhí)行體要么是一個(gè)花括號(hào)擴(kuò)起來的語句塊,則這個(gè)語句塊整體作為條件執(zhí)行體;要么是以分號(hào)為結(jié)束符的一行語句,甚至可能是一個(gè)空語句(空語句是一個(gè)分號(hào))。
如果if塊后有多條語句作為條件執(zhí)行體,如果省略了這個(gè)條件執(zhí)行體的花括號(hào),則會(huì)引起編譯錯(cuò)誤,看下面代碼(程序清單同上):
//定義變量c ,并為其賦值 int c = 5; if (c > 4) //如果c>4,執(zhí)行下面的執(zhí)行體,將只有c--;一行代碼為條件執(zhí)行體 c--; //下面是一行普通代碼,不屬于條件執(zhí)行體 System.out.println("c大于4"); //此處的else將沒有if語句,因此編譯出錯(cuò) else //否則,執(zhí)行下面的執(zhí)行體,只有一行代碼作為代碼塊 System.out.println("c不大于4");
在上面代碼中,因?yàn)閕f后的條件執(zhí)行體省略了花括號(hào),則系統(tǒng)只把c--;一行代碼作為條件執(zhí)行體,當(dāng)c-;語句結(jié)束后,if語句也就結(jié)束了。后面的System.out.println("c大于4");代碼已經(jīng)是一行普通代碼了,不再屬于條件執(zhí)行體,從而導(dǎo)致else語句沒有if語句,從而引起編譯錯(cuò)誤。
相關(guān)文章
SpringBoot增強(qiáng)Controller方法@ControllerAdvice注解的使用詳解
這篇文章主要介紹了SpringBoot增強(qiáng)Controller方法@ControllerAdvice注解的使用詳解,@ControllerAdvice,是Spring3.2提供的新注解,它是一個(gè)Controller增強(qiáng)器,可對(duì)controller進(jìn)行增強(qiáng)處理,需要的朋友可以參考下2023-10-10
idea中springboot項(xiàng)目連接數(shù)據(jù)庫報(bào)錯(cuò)的原因解析
這篇文章主要介紹了idea中springboot項(xiàng)目連接數(shù)據(jù)庫報(bào)錯(cuò)的原因解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
SpringBoot+mybatis實(shí)現(xiàn)多數(shù)據(jù)源支持操作
這篇文章主要介紹了SpringBoot+mybatis實(shí)現(xiàn)多數(shù)據(jù)源支持操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10
Java利用Netty時(shí)間輪實(shí)現(xiàn)延時(shí)任務(wù)
時(shí)間輪是一種可以執(zhí)行定時(shí)任務(wù)的數(shù)據(jù)結(jié)構(gòu)和算法。本文將為大家詳細(xì)講解一下Java如何利用Netty時(shí)間輪算法實(shí)現(xiàn)延時(shí)任務(wù),感興趣的小伙伴可以了解一下2022-08-08
SpringBoot集成RocketMQ實(shí)現(xiàn)消息發(fā)送的三種方式
RocketMQ?支持3?種消息發(fā)送方式:?同步?(sync)、異步(async)、單向(oneway),本文就將給大家介紹一下SpringBoot集成RocketMQ實(shí)現(xiàn)消息發(fā)送的三種方式文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-09-09
一文掌握J(rèn)ava開發(fā)工具M(jìn)aven(簡單上手)
掌握maven的相關(guān)知識(shí)是Java開發(fā)必備的技能,今天通過本文從入門安裝開始,逐步深入講解maven的相關(guān)知識(shí),包括maven的安裝到簡單上手maven項(xiàng)目開發(fā),感興趣的朋友跟隨小編一起看看吧2021-06-06
spring-session簡介及實(shí)現(xiàn)原理源碼分析
這篇文章主要介紹了spring-session簡介及實(shí)現(xiàn)原理源碼分析,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11

