Java零基础快速入门|控制语句(上)

本篇文章主要内容:
控制语句概述
if语句
Switch语句
学习目标
记住所有控制语句的语法格式,理解不同的控制语句分别在哪些不同的情况下使用,并且能够熟练编写这些控制语句。
知识框架

控制语句概述
在大部分编程语言当中都会存在控制语句,控制语句是一个程序的灵魂,我们只依靠“标识符、关键字、变量、运算符”等零散的知识点是无法进行流程控制的,无法实现一个具体的功能或业务,所以控制语句这一章节非常重要。
现实生活中哪些业务需要使用控制语句呢?
比如说“小孩身高如果高于 1.2 米,则乘坐交通工具就需要收费了,反之则免费”,再比如“A 账户向 B 账户转账 10000 元,首先需要判断A 账户的余额是否大于等于10000 元,如果余额充足则可以转账,不足则无法转账”等等, 这些业务当中都需要使用控制语句进行控制才能完成。
什么是控制语句,官方的解释是这样的:
控制语句即用来实现对程序流程的选择、循环、转向 和返回等进行控制。Java 语言中共有 8 种控制语句,可以分为“选择语句”,“循环语句”, “转向语句”,“返回语句”四类。
那么,这8 种控制语句分别是什么呢?
if 语句、switch 语句、for 循环、while 循环、do..while 循环、break 语句、continue 语句、return 语句。其中if 和switch 语句属于选择语句,for、while、do..while 语句属于循环语句,break 和continue 语句属于转向语句,return 属于返回语句。
接下来让我们认真的学习每一个语句。
选择语句
选择语句又称为分支语句,它通过对给定的条件进行判断,从而决定执行两个或多个分支中的哪一支。
因此,在编写选择语句之前,应该首先明确判断条件是什么,并确定当判断结国为“真”或“假”时应分别执行什么样的操作/算法。
在 Java 语言中选择语句主要提供了两个, 一个是if 语句,另一个则是switch 语句。
if语句
我们先来看if 语句,if 语句的编写方式归纳为以下四种,请看下图:

if 语句是非常简单容易理解的,if 被翻译为如果,else 被翻译为其它,我们针对以上第二种写法进行说明:如果布尔表达式的结果是“真”,则执行它后面的分支,反之则执行 else 对应的分支。好比说“如果外面下雨了(真),出门则拿一把雨伞,反之则不带雨伞”。再比如“如果你吃饱了(真)就不需要再吃了,反之则需要继续吃东西”。那么以上两个业务用代码应该如何实现呢?请看下面程序:

上图中第一种写法对应的原理图:

上图中第二种写法对应的原理图:

上图中第三种写法对应的原理图:

上图中第四种写法对应的原理图:

通过以上原理的分析,我们可以得出 if 语句的任何一种形式在执行的时候只要有一个分支执行,则所对应的整个if 语句就全部结束了,换句话说,对于一个独立的完整的 if 语句来说, 最多只能有一个分支执行。
另外,我们可以得出“图 6-1”中的四种写法,其中第二种和第四种都带有else 分支,所以这两种写法我们可以确保肯定会有一个分支执行,另外两种写法则无法保证,也就是说第一种和第三种这两种写法可能一个分支都不会执行,这两种写法的分支是否执行取决于条件是否为true。
还有,Java 语言中有这样一条规定:当分支中只有一条Java语句话,大括号可以省略不写, 如以下程序:

虽然大括号可以省略,但是大家编写程序的时候一定要小心,分析以下程序错在哪里?

显然if 是没有任何问题的,输出“男”也是没问题的,输出“hello world!”也是正常的, 只不过负责输出“hello world!”的那一行代码不在 if 语句的分支当中,那么下面的else 则缺少了if 语句而编译报错。换句话说,else 以上的代码都没有问题,错误出现在else 缺少了if。
虽然Java规定当分支中只有一条Java语句的话大括号可以省略,但是为了程序具有很强的可读性,所以建议在实际开发中还是不要省略大括号会比较好。
那么,接下来我们给大家列举几个if 语句的案例,帮助大家更好的理解和运用 if 语句。示例代码 1:业务背景:根据用户输入不同的数字来判断用户不同性别,当输入 1 时性别为男,当输入 0 时性别为女,输入其它则不合法。

示例代码 2:业务背景:键盘接收一个学生的成绩,范围在[0-100],根据成绩判断等级, [90-100]等级为“优秀”,[80-90)等级为“良好”,[70-80)等级为“中等”,[60-70)等级为“及格”,[0-60)等级为“大笨蛋”,输入其它数字表示成绩不合法。

对于初学者来说以上程序是可以的,但是对于老程序员来说,以上的代码就太冗余了,我们将其进行优化,看以下代码:

千万别机械性的一行一行对抄代码,实际上这种学习方法是非常痛苦,并且低效的,软件开发主要培养的是编程思想/编程思路,使用编程的思路解决现实生活中的问题。
当然,对于初学者来说我们不可能刚开始就写出简单而高效的程序,这需要不断的模仿,不断的积累,尤其我们可以多参考高手写的程序(例如:JDK 源代码),当你的代码达到一定量的时候,你就可以出山了。
示例代码3:业务背景:系统首先接收天气参数,1 表示下雨天,0 表示晴天,如果天气是晴天,输出“走起,一起出去玩耍喽!”,当天气是下雨天,则继续接收性别参数,1 表示男, 0 表示女,当性别为女,则拿一把小花伞出去玩,当性别为男,则拿一把大黑伞出去玩。

运行结果如下图所示:


通过以上的程序我们得知,if 语句是可以进行嵌套使用的,也就是说 if 语句的某个分支当中还可以继续编写其它 if 语句。实际上所有的控制语句都是可以进行嵌套使用的。
语句嵌套这个知识点本来是不需要拿来进行特殊强调的,专门强调之后反而会让初学者特殊对待,我希望大家不要特殊对待嵌套。
虽然被嵌套的是一个控制语句,但这个控制语句也是一段普通的java 程序,你说呢!如下图:

总之,选择语句之 if 语句,在实际开发中使用频率非常高,大家一定要掌握 if 语句的编写方式以及运行原理,也可以自己想一些现实生活中的小例子加以练习。
switch语句
switch 语句和if 语句一样,都属于选择语句(分支语句),不再赘述,我们直接来看一下一个比较完整的switch 语句结构是怎样的,请看下图:

switch 运行原理是怎样的呢,请看下图:

switch 运行原理文字性描述是这样的(以上图为例):拿着c 和表达式 1 进行比较,如果相等,则执行语句 1,如果不相等,继续拿着c 和表达式2 进行比较,如果相等,则执行语句2,如果不相等,继续...,如果 c 和所有的分支表达式都不相等,此时default 分支“语句n+1” 则执行。
以上描述是switch 语句的一般性执行流程,实际上在执行过程中还有很多因素的影响,接下来我将列出使用switch 语句的一些注意事项:
① switch 语句后面的小括号“()”当中都可以出现什么,在JDK1.6 之前(包括1.6 在内) switch 只能探测int 类型的数据,但是在JDK1.7 之后(包括 1.7 在内),switch 语句除了支持int 类型之外,还支持 String 类型。也就是说从 Java7 开始 switch 后面小括号中可以出现字符串。
② switch 虽然只能探测int 类型,但是也可以将byte,short,char 类型放到小括号当中,因为这些类型会自动转换成int 类型(小容量向大容量转换称为自动类型转换)。
③ switch 语句当中case 是可以进行合并的,例如以下代码:

④ switch 语句当中当某个分支匹配成功,则开始执行此分支当中的java 语句,当遇到当前分支中的“break;”语句,switch 语句就结束了,但是如果当前分支中没有“break;”语句, 则会发生 case 穿透现象,也就是说下一个分支也不再进行匹配,直接进入下一个分支执行, 直到遇到“break;”为止。例如以下代码:

执行结果如下所示:

接下来我们来看几个switch 的经典案例,请看代码:
示例代码 1:从键盘接收一个数字[1-7],当数字是 1~5 的时候,控制台输出工作日,当数字是 6~7 的时候,控制台输出休息日,其他数字提示错误信息。

示例代码2:业务背景:键盘接收一个学生的成绩(假设成绩是合法的),范围在[0-100], 根据成绩判断等级,[90-100]等级为“优秀”,[80-90)等级为“良好”,[70-80)等级为“中等”, [60-70)等级为“及格”,[0-60)等级为“大笨蛋”。只允许使用switch,不允许使用 if 语句。

运行结果如下图所示:


以上程序在编写时候的核心技巧是:
[90-100]分的所有数字,包括浮点型数字,让其除以 10 之后强转为int 类型,结果一定是 9 或者 10。
[80-90)分的所有数字,除以10 之后取整,结果一定是8,以此类推。
没关系同学们,大家在起初学习的时候不一定会马上写出来以上程序, 这个过程是需要积累的,下去之后先自己模仿我的程序,慢慢的你就会写了。
if 和 switch 都是条件判断语句(分支语句/选择语句),在效果上是没有什么差别的。而不同, 我们可以从效率上来看一看,举一个很简单的例子: if(a > b) { a = b;} else { b = a; } 如果将这个例子放在 switch 语句中,也并不是不能实现,但是实现起来可能会比较麻烦一些,因为在
switch 语句中case 要求的是常量,一般是不能进行逻辑判断的,所以这也是 if 语句优于switch 语句的地方。但是如果您判断的都是几个常量的数据,我建议您最好采用 switch 语句,虽然if 语句也是能实现的,但是性能就比switch 差的有点远了。
最后附Java零基础视频教程给大家,配合学习效果更佳!!

