Java编程中的条件判断之if语句的用法详解

if语句使用布尔表达式或布尔值作为分支条件来进行分支控制,其中if语句有如下三种形式:

  第一种形式:

?
1
2
3
4
5
6
7
if ( logic expression )
 
{
 
statements…
 
}

  第二种形式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if (logic expression)
 
{
 
statements…
 
}
 
else
 
{
 
statements…
 
}

  第三种形式:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
if (logic expression)
 
{
 
statements…
 
}
 
else if (logic expression)
 
{
 
statements…
 
}
 
//可以有零个或多个else if语句
 
else //最后的else语句也可以省略
 
{
 
statement
 
}

  在上面if语言的三种形式中,放在if之后的括号里的只能是一个逻辑表达式,即这个表达式的返回值只能是true或false.第二种情形和第三种情形是相通的,如果第三种形式中else if块不出现,则变成了第二种形式。

  上面的条件语句中,if(logic expression)、else if(logic expression)以及else后花括号括起来多行代码被称为代码块,一个代码块通常被当成一个整体来执行(除非运行过程中遇到return、break、continue等关键字,或者遇到了异常),因此这个代码块也被称为条件执行体。例如如下程序:

  程序清单:codes/04/4-2/TestIf.java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class TestIf
 
{
 
public static void main(String[] args)
 
{
 
int age = 30 ;
 
if (age > 20
 
//只有当age > 20时,下面花括号括起来的语句块才会执行
 
//花括号括起来的语句是一个整体,要么一起执行,要么一起不会执行
 
{
 
System.out.println( "年龄已经大于20岁了" );
 
System.out.println( "20岁以上的人应该学会承担责任…" );
 
}
 
}
 
}

  因此,如果if(logic expression)、else if(logic expression)和else后的语句块只有一行语句时,则可以省略花括号,因为单行语句本身就是一个整体,无须花括号来把它们定义成一个整体。下面代码完全可以正常执行(程序清单同上):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//定义变量a ,并为其赋值
 
int a = 5 ;
 
if (a > 4
 
//如果a>4,执行下面的执行体,只有一行代码作为代码块
 
System.out.println( "a大于4" );
 
else
 
//否则,执行下面的执行体,只有一行代码作为代码块
 
System.out.println( "a不大于4" );

  通常,我们建议不要省略if、else、else if后执行块的花括号,即使条件执行体只有一行代码,因为保留花括号会有更好的可读性,而且保留花括号会减少发生错误的可能,例如如下代码,则不可正常执行:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//定义变量b ,并为其赋值
 
int b = 5 ;
 
if (b > 4
 
//如果b>4,执行下面的执行体,只有一行代码作为代码块
 
System.out.println( "b大于4" );
 
else
 
//否则,执行下面的执行体
 
b--;
 
//对于下面代码而言,它已经不再是条件执行体的一部分,因此总会执行
 
System.out.println( "b不大于4" );

  上面代码中以粗体字标识的代码行:System.out.println("b不大于4");,将总是会执行,因为这行代码并不属于else后的条件执行体,else后的条件执行体就是b--;这行代码。

  if、else、else if后条件执行体要么是一个花括号扩起来的语句块,则这个语句块整体作为条件执行体;要么是以分号为结束符的一行语句,甚至可能是一个空语句(空语句是一个分号)。

  如果if块后有多条语句作为条件执行体,如果省略了这个条件执行体的花括号,则会引起编译错误,看下面代码(程序清单同上):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//定义变量c ,并为其赋值
 
int c = 5 ;
 
if (c > 4
 
//如果c>4,执行下面的执行体,将只有c--;一行代码为条件执行体
 
c--;
 
//下面是一行普通代码,不属于条件执行体
 
System.out.println( "c大于4" );
 
//此处的else将没有if语句,因此编译出错
 
else
 
//否则,执行下面的执行体,只有一行代码作为代码块
 
System.out.println( "c不大于4" );

全部评论

相关推荐

03-06 12:44
已编辑
吉林大学 Java
是个千人厂,没听过名字。1. 做一个自我介绍。2. 你这个项目和技术栈从哪里学的?有报辅导班嘛[答 都是是自己网上学的,学校教的东西没用]3. 我看了你放在github上的项目,前端也是你写的嘛[答 AI写的,90%精力用于后端开发,前端单纯用于作为后端逻辑的可视化技术验证(骗你的其实后端也是AI写的)]4. 好,你觉得这些技术栈研究得最深刻的是哪个[答 八股压根没背到后面,昨晚背了MySQL就说MySQL]5. 那讲一下MySQL的索引[答 从B+树选型一路吟唱到联合索引,索引失效]6. 联合索引ABC问题,AB走索引嘛,BC走索引嘛?BAC走索引嘛?A or B 走索引嘛[走,不走,走,不走。面试官点头说可以]7. 讲一下项目里Redission分布式锁实现8. Watchdog机制具体是怎么工作9. 消息队列有考虑过Kafka嘛,怎么选型的10. 你这个项目消息队列可能出现什么问题,怎么解决这个问题?[瞎扯没用的,被面试官引导答了视频处理可能产生消息堆积问题,然后开始吟唱]11. 文件分片自己写的还是用的什么框架?上传进度的Redis数据结构?上传的视频有多大?小分片大小?12. 项目里Redis会话记忆是啥意思?[面试官说不行,没人把这个全放Redis里[生气R]]13. 那这和直接查数据库有什么区别[扯了Token成本和解决幻觉问题之类的,给面试官听笑了,我最后也没绷住]14. 你平时是怎么使用AI coding的15. 算法,给了我一个leedcode链接,一看做过了。然后换了一道三数之和,也做过了。然后面试官说算了,让我讲讲思路吧反问:1.有什么需要提高的地方2.介绍一下部门业务有哪些这个面试官真的感官非常非常好,问问题还疯狂引导,感觉不会也会了。找实习  牛客AI配图神器#
查看15道真题和解析
点赞 评论 收藏
分享
求问!考研下岸,打算参加春招,我这个bg能进啥厂,或者需要搞点深度项目再投吗
Java抽象带篮子_...:直接海投,可以看看我的考研失利速成冲春招贴,里面详细写了简历怎么写,学哪些项目可以速成
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务