00:01
回来了吗?同学们,回来的话打个一来。好了。好的好的,我们这个自己写啊写,呃,写一下,然后等明天的时候呢,我们再。带着大家写一下啊,你先自己写一下,看能不能写出来好吧,然后呢,接下来我们看一看另外的一个语句啊,除了这个if之外啊,还有一个选择语句叫Switch分支语句,来看一下分支语句。来,我们去新建一个文件啊,我们叫Switch。Switch test,零一。卡了。
01:02
什么情况?Switch。语句。首先呢,第一个啊,Switch语句也是选择语句。啊,也可以叫做什么呀,分支语句。啊,都行。那第二个呢,就是Switch语句的。语法格式啊,然后还有Switch。语句的啊,执行原理。它这个语法格式是什么呢?是这样的,Switch小括号小括号啊小括号这里呢,可以这个可以跟什么呢?一会儿来解释啊,然后呢,大括号里边可以跟什么呢?跟跟这个。Kiss往后边呢,哎,有一个值。
02:03
实际是有位。冒号。然后紧接着什么呀语。啊,这个Java语句可以有多个。啊,可以有多个。然后呢,紧接着再往下是什么呢?是break。啊,这写个省略号吧,然后再来K值。啊,冒号。加语句。啊,Break。啊,K值,嗯,再来。啊,来default。Java语句。啊,加一句。那么这个值呢,可能是值一,值二,值三。他的这个。
03:01
完整的一个语法格式啊,最完整的Switch语句就是这样写。啊,以上。是一个完整的Switch语句。其中啊。其中什么呢?Break语句。不是必须的。Default语句也不是必须的啊。Default语句。Default也。分支吧,方的分支啊,也不是必须的啊,不是必须的。其中啊,这个值它支持什么值呢。Switch呢,它支持什么呢?它支持括号里边这个值啊,它是一个int类型以及string类型啊,以及string类型。Switch。语句。支持的值。有哪些?
04:02
啊,它支持什么呢?Int类型以及什么呢?哎,String类型。注意。支持支持。各位要知道啊,在。JDK8之后,Switch。语句开始支持什么呀?字符串词论。类型。啊,就是Switch后面这个值可以是字符串的。啊可以是字符串,那么它的一个运行原理呢,我在这里给大家解释一下啊,就是说呀,他拿着这个,拿着Switch后面里这个值和这个case后面这个值啊进行匹配。
05:01
如果说它俩之间可以画等号,就是它和它相等A正好匹配上了,那么就执行这个分支。啊,如果遇到这个,这个就结束了。啊,遇到break Switch语句就结束了。如果这个值和这个值。他没有匹配成功,他会拿着这个值和这个值进行匹配。那值和值之间匹配的时候,它内部会使用双等号进行比较。啊,内部会使用双号进行比较。Switch语句中值。为什么呢?与这个值一。二。比较的时候啊,会使用什么呀,双等号进行比较,双等号啊进行比较。
06:02
那么还有一个问题我要问一下大家,这个Switch语句它支持int。和字符串准。对吧,那我问大家它支持不支持,就是这个BAT和short和char能不能往这个括号里边写。这个应该是可以的,对吧。因为小容量是可以自动转换成大容量。你比如说你是。啊,100。Be类型能不能直接往这放啊,可以,因为bet可以自动转换成什么呀,In。啊,但是要注意Switch啊,它实际上只支持int和string。你就算把这个bit传进来,把这个bit short叉传进来,它也会自动把这个bitt到叉转换成什么。类型类型。那在这儿Switch语句啊,本质上啊是只支持什么,只支持int。
07:07
和。但是。Bit short char也可以使用在Switch语句当中,因为什么呢?因为bit。Short差可以进行自动类型转换。啊,会进行自动类型转换,是这样的。啊,那么接下来呢,它这个执行原理我来说一下啊,我说一下。强调一下各位啊,Break不是必须的,不是必须的啊,然后default也不是必须的。那么这个Switch执行原理是什么呢?是拿。直。与什么呀,与值一进行比比较。
08:00
如果相同。则执行该分支。中的加Y语句。然后遇到break语句。Switch语句就结束了。如果值与什么呢?值一不相等。啊,值与值一不相等,就是这个值啊,它与值一不相等。会继续。那谁呢,拿纸?与什么呢?与这个值二进行。比较。如果相同。则执行该分支。中的加Y语句啊。
09:02
然后遇到break语句,Switch结束。那如果没有遇到break语句,会发生kiss穿透现象啊,注意。如果分支执行了,但是分支最后没有break。此时会发生case穿透现象。Case穿透现象啊,那这个case穿透现象是什么?一会给大家演示一下啊,如果如果,如果这个地方它要是没有这个break,假如说这个值和这个值一怎么着匹配成功了,这个位置会执行,那么接下来这个将不再和这个值进行比较,直接这个分支就执行了,我再说一下啊,这叫case穿透,我再强调一下,如果这个位置有这个的话,整个Switch就结束了,如果这个位置没有这个break语句,那么假设这个值与一匹配成功了,那么匹配成功之后,这个分支之行,一看到这里没有break,那么马上穿透,也就是这个值不再和这个值二进行匹配,马上执行这个分支啊,如果这个也没有的话,还会继续往下穿透执行这里,直到遇到break这个思句就结束了,这就是穿透的一个现象啊。
10:27
呃,它的原理其实很简单啊,Switch其实有点什么意思啊,有点那个。有点电闸的意思啊,大家这个,呃,英语这块啊,呃,应该也有也有也有这方面的这个意思对吧,Switch有点。像那个老式的电闸啊,我不知道大家有没有见过那个电闸啊,推的那个闸Switch切换啊切换他往拿着这个纸往这个上面搭搭一下啊,看通不通啊,如果不通的话,拿着这个值往这个上面搭一下,对不对,搭上去啊。就那个电闸合上去,就那意思啊,把这个值对吧,和这个值进行匹配一下。
11:01
啊,匹配一下,那如果说所有的case都没有匹配成功的话,这个default语句啊,就会执行这个default这里的代码就会执行。啊,就是所有的。这个case都没有,呃,这个匹配成功。啊,那么最后default语句default分支吧,会执行,但default不是必须的。啊,然后这个break呢,也不是必须的啊,也不是必须的,我们可以看一看例子啊,先知道它的原理,第一呢,我觉得先记住这个语法格式,第二个呢,就是要了解它的一个执行原理啊,它是怎么执行的,然后知识的类型是哪些类型啊public我们叫做Switch test。啊,我们来看一下。呃,随便吧,比如说Switch是不是啊,然后我在这有个浪类型啊,然后呢,浪类型呢,假如说X等于这个100L,那你说这个地方跟跟一个X行吗。
12:10
这样行吗?同学们来咱们互动一下也行啊,那这块怎么样,这个。能编译通过吗?如果编译通过的话,编译报什么错呀,这个。这个编译能不能通过?分析这个程序是否能够编译通过。首先,Switch。只支持int和string类型。这个不是字符串,它是long类型对吧?那么long类型直接把X放到这,它会有什么问题呢?就相当于是说你写了一个long类型的X等于100L,然后int类型K等于X,你觉得这样行不行啊?把X付给K行吗?
13:00
就你把X传进去,是不是就有点儿类似于这个代码。是吧,哎,那你这个肯定会怎么着啊。大转小会损失精度,哎,这个邓俊说的有道理啊,有道理不兼容的类型,来我们看一下这个地方呢,它会出什么问题,Java cb Switch走。不兼容的类型从long转换到int可能会损失,对吧,所以这块的一个编译错误信息啊,是这样的一个信息啊,是这样的一个信息。啊,所以呢,大家呢,猜的都是正确的啊,都是正确的,那么通过这个呢,我们也足以说明了我们这个Switch啊,这块是只能跟什么呀?哎,我们的一个int类型啊int类型,那如果说我现在在这儿有一个bit类型B等于100,那能不能呢。这一块能不能接收呢?来我们看一下。
14:05
好,大家看这个程序啊,编译通过了。是不是,哎没有任何问题,那么接下来呢,我们把这个程序要给它注释掉啊,注释掉之后呢,哎,记住啊,虽然BAT传进来了,但是呢,它这个类型啊,它还是会转成什么呀,我们的个int类型啊,那如果是short类型呢,Short类型这块的话,假如说是给个100吧,然后呢,我们Switch,哎,我们把这个S呢传进来,诶行不行,哎给一个差类型C变量,哎,比如说我们给一个97。对吧,或者给一个我们的一个英文字母小写的A,那Switch行不行呢,对吧?哎,Switch接下来我们这块呢,C写上。这行不行呢?哎,Bit可以对吧,Short也可以差可以吗?来看一下。来我们编译通过了,这说明什么呀,这说明这个是允许的,对不对,这个也是允许的,这个也是允许的啊允许的。
15:06
好了,那么这个。这块啊是不行的,因为这个类型是浪类型啊,哎,损失精度对不对,哎,这属于强零转换,如果说你想让这个程序通过的话,你可以这么干。怎么干呀?哎,你在这块啊,可以加个括弧,加个int就行了。你这是强连转换吗?对不对,你强转成int,哎,你再看这个程序行不行,你看。走你看是不是行了对吧,哎,所以说这个可以了,这个be也行,Short也行啊,差也可以,那么这个实际上差传过来可以,原因是什么呢?是因为啊。我们这块啊,就类似于什么呢?Int I等于C是一样的,你把C传进去就相当于给一个int嘛,那你C呢,是一个类型差类型是一个小数量,小数量转换成大数量,叫自动类型转换,只不过最后的结果是多少,是97呗。你表面这样写的是一个C,实际上这个位置是97啊97。对,97啊。
16:02
行了,那这个呢,咱们这个。关于Switch语句支持什么类型啊,我们就说到这儿啊。我们现在的这个JDK的一个版本啊。是比较高的啊,是远远高于八的对不对,Java c。编译器Java。啊,那么这都是十三点零点二啊,那么这块它支持不支持。字符串呢啊,比如说这个字符串ABC。行不行呢?来我们看一下啊,Java编译一下。好,也支持啊,Switch也支持。字符串词缀啊类型好,这是一个。那么大家看到了,实际上这个Switch我写了这么多,但这个里边你有没有发现都不是必须的,你看我是不是直接Switch小括号大括号里边是不是我什么也没写都行啊,对吧?当然如果是你什么也没写的话,我觉得你写这个语句也没有任何意义,是不是?哎,没有任何意义。
17:17
那么接下来呢,咱们可以简单写一个例子啊,我们先可以写一个完整的Switch语句啊。写一个完整的Switch语句。来看看Switch怎么用啊?呃,假如说现在呢,我在这个位置呢,我给一个什么呢。嗯,给一个字符吧。一个字符。这个这样。接收还是接收吧,啊接收键盘输入。根据输入的数字来判断星期几。
18:01
零。啊。星期日一。啊,比如说就是星期一呗,对吧?啊然后呢,以此类推,以此类推啊那怎么写呢?Java u scanner呗。是不是,哎,New一个什么呀,Java scanner这个没得可说的啊,system.in。过来之后呢,接下来我们s system.out吧,点print啊打印输出。请输入。呃,零到六吧。零到六的。整数。啊,整数。那么这块呢,ST呢就会输进去对吧。啊,它会返回一个int类型值吧。
19:04
是不是,哎,那Switch我能不能拿过来去匹配呀,K0的时候。对吧,哎,我输出什么呀。哎,比如说叫做星期日呗,是不是,哎,然后。CASE1的时候c.out点打印,注意啊,这个case要顶格。和这个S对齐啊,在规范上是这样要求的,不是这样写啊。对齐啊。拿着它和它进行匹配,和它进行匹配。啊,星期日。一的话,那就是星期一呗。啊,然后再加一个break。Case,比如说二,那system out。第二,Print打印输出,我们叫做星期二是不是,哎,Break。
20:02
然后呢,Case啊,System out,点打印输出。比如这就是星期三呗。是不是,哎。那case4system.out点打印输出,那星期414啊,然后呢,再来一个break kiss。呃,1012345。啊,然后呢,system.out点打印输入信息。星期五啊,然后呢,Break是不是哎,Kiss。六。System out,点打印输出。说什么呀,比如说星期六啊,那default我就先不写了啊,先不写了,那么这个行不行呢。我们来试一下啊,试一下Java c,编译一下Switch。
21:02
编译这个程序啊,编译完之后呢,我们去运行。回车,请输入零到六的整数啊。注意我们这里没有做什么安全的一个控制啊,假设输入的数字就是零到六啊,假设输入的数字就是零到六啊。假设输入的数字就是正确的。啊,零到六你输别的值不好使啊,来输入零星期日对吧,那如果输入一。啊,输入三。星期三对吧,哎,输入五啊星期五。输入六。那星期六输入零。啊,星期日是不是,哎星期日那么这块呢,其实这个程序啊,我们接着再往下测试一下啊。嗯,能不能改善一下,能不能改良一下,这个当然可以改良啊,就比如说这个system.out点这个这个语句就可以改良。
22:04
是不是,哎,你可以改啊,没有任何问题那行。我们呢,把这个程序啊注释掉。啊,注释掉,注释掉之后呢。接下来啊,我们在这儿啊,把这个拿过来,拿过来之后呢,粘贴到这儿啊,贴过来之后呢。我们尝试着把这个break去掉,我们来看一下case穿透现象,行吧,哎,叫做case穿透啊现象。那假如说要穿透的话,我们看看啊,这块怎么能穿透啊,假如说我输入一个一,我说输入零会穿透吗。应该不会对吧。看一下啊,Java c编译Java去运行。我输入零,零和零能匹配上,我输入的是零。这是零,那么这个就是零,零和零是不是就匹配上了。
23:01
啊匹配上啊匹配上之后就走这个走这个break了吧,是不是就结束了。你看信息就结束了,那如果说我输入的是一个。一呢?输入是一,一和一就匹配上是走星期一,然后这个break没有就穿透,那星期二会输出,遇到这个break是不是就结束了,所以会输出一个星期一个星期二是吧,来,那输入一啊走回车,你看星期一和星期二是不是就穿透了,那如果你这块都没有呢,都没有那你就穿透呗,是不是哎,都穿透。是吧,你看你穿到你输入一试一下Java c去编译啊编译之后呢,我们Java去运行,那输入一,你看它应该是星期一会输出,星期二会输出,星期三会输出,星期四也会输出是吧?哎,到星期五输出,然后这边就break了啊break了走。是吧,哎,那如果是输入六呢。收入六那就正常了呗,星期六呗,对吧,那这块你就没必要再加break了啊,为啥呀,因为你执行完这个也早晚就是结束了啊,没必要加break了。
24:07
这是case穿透现象啊,Kiss穿透现象。好了,那么。Case。嗯,Default语句啊,关于default语句。当所有的case都没有匹配上的时候。啊,Ault。那这块呢,其实也可以演示一下啊,把这个拿过来放到这儿。上边这个程序呢,我就先注释掉。啊,先注视掉下面的这块啊呃。我们这样做,把这个break拿过来。放到这啊,放到这一个。
25:02
放到这一个,放到这一个啊,然后这个呢。也来一个吧。然后这个K0的时候,我给它去掉。然后在这来一个default。System out。第二打印输出啊,比如说星期日日,当然这样做呢,可能会有问题,各位啊,可能会有问题。那么什么问题呢?如果我们输入的数据啊,不是0123456,是其他值的话,可能也是星期日。对吧,哎,这块无所谓了啊,跟这个业务咱就不挂钩了,我们看看这个default啊。来。Java c呢,我们去编译一下我们这个程序啊,然后Java去运行一下Switch。T01走。比如说我们输入的是一,那当然就是什么呀,星期一我们输入二呢,就是星期二,我们输入三呢,就是星期三输入输入五呢就是星期五,输入六呢,我们就是星期六对吧。
26:05
然后呢,输入的是。假如输入的是零,那肯定就是星期日,那如果输入的是100,大家看看现在是不是也是匹配不上啊,100和任何一个数字是不是都匹配上,匹配不上的话,这个default就会走的啊,就会走的,那这样的话输出的结果就是什么呀?啊就是星期日啊星期日这是一个default语句啊default语句。那么另外呢,还有一个知识点啊,我需要在这里给大家说一下。就关于什么呀,关于K合并的问题。怎么写呢?比如说用户输进去一二三都是星期一。啊,比如CASE1CASE2啊K3。我们认为都是星期一。啊,然后呢,K,嗯。
27:01
四。啊,这个是K5。啊,这是K6,这是七,我就随便写了啊八。随便写的啊,咱们来编译一下,看看这种语法形就是case能不能合并,能不能在这里写多个。Java c呢,我们去编译一下啊,然后Java去运行一下Switch。那这块我输入一呢,星期一,我输入二呢,它还是星期一,我输入三呢,它还是星期一,我输入四的时候,哎,它就是星期二了。对吧,所以说当你输入,当你。哎,当你和拿着这个值和这个值匹配上,或者是这个值匹配,或者是这个值匹配,都会走这个分值啊,这叫case合并啊,这个叫case合并。好了各位,那这个语法呢,我们就先说到这儿啊,先说到这在这个案例当中呢,最主要是给大家说Switch它的语法结构是怎样执行原理其实也很简单,其实也是分支语句,一个分支一个分支的,所以主要就是我们这个值和我们的值,一值二值三哎进行匹配,如果能匹配上就执行分支,如果匹配不上就不执行,如果都匹配不上就执行default,如果匹配上其中一个,遇到break就结束了,如果没有break,那就穿透了啊,总之这个值这块呢,既支持int类型的数据啊,又支持我们的字符串啊,当然bit short char也能传过来,只不过bit short叉啊,可以做自动类型转换啊,它类型会自动转换过来啊,自动转换行了,那这块呢,咱们就说到这儿啊,咱们这个Switch啊,可能还有一些案例需要去做一下啊,这个咱们今天呢,就讲这么多吧,啊讲这么多在这里呢,我再布置一个作业,各位。
28:53
这个作业是什么呢?是这样的一个作业啊。用Switch语句来实现这个功能。
29:04
注意啊,用必须用Switch啊,不允许用别的。这个不好写啊,你得有点小想法。来,斜杠星,斜杠拿过来。来看这个啊,必须使用Switch。语句来完成,你该怎么办?啊,这是一个题目,当然除了这个题目啊,还有我刚才说的那个什么雨天和晴天的那个题目,然后呢,一会儿啊,我呀再布置一些作业,然后呢,我把作业放到百度网盘上。行吧,大家从百度网盘上下载就行了,好吧。
我来说两句