00:01
好朋友们,我们看下一个,下一个要给大家讲解的是什么内容呢?下一个要给他介绍的是影视值,这个东西也非常的有用。那么何为影视值呢?它是这样子的啊,影视值也叫影视变量,它是干什么的呢?将某个形参变量标记为implicit,注意前提你要用implicit来进行一个标记。所以编译器会在方法省略影视参数的情况下,去搜索作用域内的影视值作为缺省参数,那什么时候用得到呢?哎,同学们还记不记得我们在学Java的,呃,在学这个SKY的时候,老师讲过默认值,但是这个默认值呢,它只能作用在一个函数的。一个形参上,但是这个隐式值就很厉害了,它可以作用在多个函数的形式参数上,也是它的范围呢,变得更加的广泛。说曾经有同学问我说韩老师那个隐私值我觉得没啥用,他说为什么呢?他说你隐私值不就是默认给他一个值吗?不是有了默认值为什么还要搞一个隐视值呢?我的回答很简单,默认值只能作用在一个函数,但是影视值可以作用在多个函数的形成。好,就这么一个逻辑,好,同学们,我们快速的来一个案例就完了啊,东西都比较简单。
01:23
带走一个代码。来,我们叫影视子。影视啊影视值,好,我给大家标一个二。标一个标题二,然后呢,把这个基本介绍放到这,那基本介绍有了过后呢,我们来一个快速入门案例。好,快速入门。快快,快速入门。好,来一下乙肝例。走一段代码啊同学们,呃,案例是这样给他设计的,呃,我这里呢。有一个hello。
02:01
然后呢哈,我这做成了一个隐私参数。没有给他传值,然后呢,我在调用时直接调哈,上面有一个implicit,好代码很简单,我们来写一下啊,那个代码就直接拿过来用吧,特别简单一个事,好,我来写影视值啊。好,然后呢,这个是DEMO03好,这个跟它隐式值有关系,所以我这样子干脆。影视value啊,这样子看起来更清晰一点。好,来写段代码。写一个主函数,好,直接往这一放,那么首先我们看这句话是什么意思,这个地方因为用implicit去修饰了一个。呃,参修饰的一个变量,这个就是影视值啊,这个就是就是影视。值,那么可以看到这里,我这个函数这边呢,用implicit去修饰了,这个就是隐式参数。
03:05
这个概念要很清晰啊,这个地方用implicit去修饰了这一个行参,那么什么呢?这个name。这个name就是影视参数啊,就是影视参数好吗?那这会怎么样呢?同学们看啊,我来调用一下,我直接写个hello,我不算任何东西,这时同学们看到,当我这样一写完过后呢。我们这个内蒙。就会自动的把这个阶梯传进去,好我们运行一下。我们运行一下,我们一运行过后呢,我们发现这个结果就是Jack hello,啊,Jack是从这来的。Jack是从这来的,你要再运行一下。微信。好,那么这个在底层会做一个什么工作呢?告诉大家啊,底层它会直接这样写,直接把这个十寸一传进去,就这么干的,甚至狠一点的,呃,一般可能就直接把这个传进去了,他这样传的,直接把这个阶梯就传进去了,我们看看呃,底层他是不这样做的啊,打开一下,我把这个关闭,再重新打开,弄一下它的底层的实现。
04:18
好,我们找到这个地方,我们看到哦,你看它是采用的我刚才说的第一种方式,Hello dollar1啊hello,就是你的方法嘛,好,DOLLAR1,然后使运,也就是说它底层就是这么实现的。哎。啊,因为你这个哈,这个呢,被它做一遍过后就变do了就可以了,这是特别简单的一个用法,大家一看就清晰了,好完成过后呢,我们来看几个案例啊,我们来看。啊,一个课堂测试题,课堂测试题好,我们来看看这个课堂测试题啊。下面的代码是否正确,并解释开了底层实现啊这个呃,实现的机制,底层的函数名,我们来看这个代码会。
05:05
做一个什么样的?啊,这个地方,呃,看看代码有没有问题。你看我们会输出什么呢?我们会输出什么呢?我们来一起看,嗯,这有一个主主函数,然后这有一个implicit,好,这是我们的影视值。影视值好的,这里面我写了一个哈。哈,好同学们,呃,我这写个hello过后呢,这边有一个隐式值,那么在底层这个地方就生成了一个哈。它会生成一个hello dollar1。没问题。好,呃,那么这个时候,呃,下面这个我就不去管它,这个地方又来了一个哈。好,这个地方在底层会生成一个什么名呢,就是哈到。诶,哈喽导了。没问题,那么这个地方哈,它在使用隐私值的时候有一个前提,千万不要写小括号。
06:08
那也就是说,如果刚才这段代码打断,这段代码我写成小括号,大家觉得会不会报错?汇报错的。如果你明确写小一个小括号,其实你的这个意图就说相当于说我要调用哈,而且不传任何参数,语法都过不去,说你在调这个影视值的时候呢,其实是有前提不要带参数了。不要再参数了,好,这个地方请大家注意一下这个细节啊,好接着回头再说,那这样一写完过后,这个函数名。这个哈,它会掉哪一个呢?它会掉这里面的,所以说它底层这边实现的这个机制呢,就是。这个地方调用的其实是哪一个哈呢,是上面这个哈,是哈DOLLAR1。Hello dollar1,然后将我们的这个实训传入。
07:04
把这个视频传进去就可以了,好,这边还写了一个哈,这个哈呢跟全面名字,它的函数名就的的确确叫哈了。好,同学们把这个看一下啊,我不去运行了。好,这个就说完,我们再看四个练习题,我现在要找人,我们同学们先花这个一分钟看一下代码,待会我找人来回答这个正确语论,诶。这这这个刚才怎么怎么变那么小了呢。哦,我把这个放大一点啊。放大一点。哎,这个怎么看不到了呢,我。哦,等一下啊,诶哦,这个是我挡住了,是谁把我挡住了这个。这这个直播看。好,往上边挪一下,好,这里就可以了啊,来,同学们观察一分钟,待会我请人说分别输出什么。
08:04
都看一下。从第一。这边是第一个二十三四看一下。好,认真的看一下。第一题第二题第三题第四题啊四个题看看分别输出什么。
09:06
这个题的考察点就是看影视值和这个默认值优先级谁高谁低,还有一个就是二性的问题。好的,现在呢,我现在找一个同学啊,来让他说一下他的这个答案分别是什么好,我来一个就近原则,就近原则好。
10:06
找这个福成同学来回答一下。来小福,第一个题,你觉得是输出什么,就你说。就是我这调这个hello,你认为输出的是哈是can了是吗?有没有不同意见的,这个你的意思就是说这输出一个哈,呃,这个SKY哈哈哈SKY是吧。有,有没有不同意见的同学们?有人说是hello hello Jack Jack,有人说是hello Jack。啊。各位同学,你们觉得这有没有问题啊?好,不管怎么样吧,第二题接着说。第二个题有一个implicit,有一个默认值,这边输入什么呢?你们认为是输出哈什么呀。
11:01
是谁的优先级高,你们你们感感觉谁的优先级高,问一下我我刚才其实都已经讲过了,我说那个implicit,你要从编译器你家直接把这东西写进去了,谁的优先级高还用说吗。对呀,我刚才不是反复讲过licit的底层是不是在编译器都直接把那东西写进去了呀,那你显然这个licit的级级别要比那个默认高吗?这个我都说到这份了,来小付说一下,现在应该知道了吧,Hello sc了,我因为你们你们其实可以推出来的啊,Hello sc这个是对的,那这个呢。第三个题呢?Hello,然后什么呢?OOKOK是吧,因为你这个in特虽然是一个呃,影视,但是我匹配不上,所以这个呢,他说是hello hello OK,好,Hello OK好,第四个题呢。
12:00
第四个题,你觉得会怎么样?有一个in特有一个implicit型,这个。这个影视参数会怎么办?好,这个题是报错,请坐下啊,好,答案基本上就出来了,首先呢,我们看一下第一个题,第一个题呢,啊,刚才啊,小福同学说,他说是这样子一个逻辑,他的意思就是说这个地方会输出hello scan,好,我们来看看对不对呢?对,我们把这个拿过来看一下啊各位朋友,我直接写一个implicit,其实大家应该感受到他这个回答有没有问题啊。哎,你们可以根据刚才讲这个原理也能推的出来implicit implicit value,好,我们这个零二案例好吧,直接写到这来,那我我就直接把这个把这个代码拿过来用一下就行了。好,同学们看到当我把这代码一删过来过后呢,我们可以看到这有一个scanner,这有个scanner,好这边呢,调用了SC,这是一个影视值,影视参数。
13:11
这是个隐式隐式参数,好同学们,我们运行一下,我们运行一下走。好,我们预习一下,我们预习下直接就报错了。他说这有一个这个含义是不是模糊的或者不确定的意思啊,大致是这么一个东西,诶大家想一想,你你想一想,两个都是十寸,你根本没法区别。你你说这个编译器到底是用name还是他呢?还是那个老规矩吗?两个女朋友都选谁,人家编译器要向编译器学习吗?都说了老老说这个事了吗?人家很严谨的对吧,所以说这个地方他去匹配了,但是他发现这个也行,这个也行,搞错那你。办法很简单,你你注销一个马上就能跑出来,好,这个第一个题是错的啊。编译性直接给你报错,所以这再次证明我们这个影视呢,具有这个一致性,就是不不能有,不能有二意性,不能有二心。好,第一个咱们就说完了,我们再来看第二个题。
14:11
那第二个题呢,呃,刚才这个就是。就小福说的,他说这个应该是输出,Hello scan,这个肯定是正确的,好,我们改一下,稍稍的改一下来走一个。好,这样子啊,我们新建一个。啊,新建一个,我们写成HELLO2吧,这样大家测一下HELLO2 hello2也有个Jack,这是HELLO2,然后为了好看呢,我把这个先注销一下,因为我不能有多个好。好,这个时候我们一执行,我们发现它输出的就的的确确是hello scner,因为从这个地方我们可以得出一个结论,就什么呢?就是当同时同时有有同时有什么呢?诶同时有这一个就是implicit。
15:01
Implicit这个值。就是影视值和默认值时,那谁的优先级高呢?就是影视implicit implic implicit,它的这个值高,这个这个。它的优先级优先优先级高,OK,好,我们运行一下,请看这边会输出hello这个啊,那为了好看HELLO2。同学们请看效果好,那么运行呢,的确输入hello,干了正确,好第二个回答是正确的,第三个,那第三个呢,这个地方呢,它又做了一点改变,就是说前面给了一个默认in参数,但是是个int,这边有个默认值,好我们再来看第三个题。好,第三个题,第三个题呢,我们把它改成这个三。改成三,然后这边始终不动它,给它来一个默认值,把这个默认值我故意把它改成把这先注销。
16:00
啊,我把这个先把上面这个注销。好,注销了以后呢,我在这加一个默认值啊,加一个影影视值啊,比如说我把这个改成int类型。改成int类型的。好,然后给他一个十好,同学们可以看到这个时候我们输出,它会输出什么呢?这里它会直接输出哈。三然后J我把它改一下啊,味道对应上就是输入hello。Hello 3JK,那就说明什么呢?啊,就说明说,如果我这个虽然标记成了一个影视啊,影视参数,但是在没有匹配到,但是在没有匹配到这个影视值的时候,我仍然会去使用。这个默认值并不会报错,好,我先把这个东西给他们写到这,这又是一个说明,说明什么呢?就是当当一个影视参数啊,当一个影视参数参数啊参数。
17:08
找不到。找不到啊,匹配不到吧,匹配匹配不到这个影视值时,影视值时影视值啊仍然会仍然会使用默认值,并不会报错。默认值好,那么这个时候呢,我们再运行一下,看看是不是HELLO3输出一个HELLO3J。好,跑起来,我们看代码呢,没有任何问题,仍然是hello,三阶正确,好,我们再看第四一个题。好,我们再看第四一个,第四一个呢,啊,它又做了一点点变化啊,它又做了一点变化干什么呢,大家看。把它改成四。啊,把这个改成四。把这个也改成四。好的,那这边改完以后呢,我们看到它的改变是这样子的,就是有一个应的默认值拿掉,把这个默认值拿掉了啊同学们把这个默认值去掉。
18:08
好的。那这个时候就出现一个可怕的现象了,就是它在掉的时候呢。他去首先找这个影视值,发现上面有一个,但是是个int类型的,再往上面走也没有,于是乎影视是匹配不到的,默认值又没有给,同时你还不传值。当然如果在三者都,比如说又有隐视值,又有默认值,传又还传了值,肯定优先级最高是传值是吧,就是当三者都有的时候,肯定是指定那个是优先级最高的,然后是影视值,然后是默认值,然后如果都匹配不到就会报错,好现在我们看目前就是又没有传参数,又没有影视值,还没有默认值,这个地方一定会抛错是哪里啊,36行抛出一个错误。执行一下,哎,同学们请看执行的效果一定是这里啊,它是36行报了一个错误,好,我们又得到一个结论,就是什么呢?啊当就是当当没有隐视值,没有隐视值没有没有默认值,没有默认值还没有传递值又。
19:18
没有啊,没有传只。传值那么就会报错,就会报错,好最后我们这个就说完了啊,就说完了,最后我们下最后一个结论就可以了,最后的结论是它的优先级是这样子的,我们这个案例就是就讲了一个问题,就是这样的啊,我们这做一个小结。讲这个案例就做一个小结。第一个就是当。当。当什么呢?当在程序中,当在程序中,哎,程序中同时有。有什么呢?影视值的匹配,同时有匹这个影视值,隐视值,默认值,默认值还有传值。
20:05
传值,那么他们的优先级应当是这样子的,其优先级就是编译器对它的优先级。编译器。的这个优先优先级,优先级V传值是最高的,它大于影视值。对,它在大于默认值,按默认值好,这是第二点,第三点在进行这个影视影视匹配的时候,不能有二一性啊,在这个影视值影视值匹配时,匹配时不能有二意性,不能有二意性二。二一。这这个这二啊二。12342E意义的一啊一。
21:00
二一诶1121性,所以你不能匹配多个,就这个意思啊,第三第四点说,如果如果这三个一个都没有,就会报错,你反正一定要给一个啊,如果三个一个都没有,那就会报错,如果这三个。都一个都没提到,如果三个都没有,如果三个。啊,三个一个都没有,三个这种情况一个都匹配不到。那就报错了啊,都没有一个都没有,一个都没有就会就会报错,好这就是我们这个题的一个结论,好我把它呢给同学们简单的板书下,那关于影视值我们就讲完了,我们把这个影视值做一个简单的板书。啊,刚才我们讲了这么多呢,其实就是讲一个影视值啊,快速入门,刚才有一个快速入门直接放到这儿了啊影视值,这是影视值的第一个案例,是一个快速入门案例,给大家放到这儿。
22:02
诶放在这里,这是我们的影视值的快速入门案例,那么快速入入门案例讲完了以后呢,我们这个课程练习我就不说了,我就直接呃做了一个练习,通过这个练习呢,我们来分析了一下影视值默认值传值的一个优先级的问题。好,我们再看一个这方啊,一个案例啊,一个案例说明说明影视值。影视值,影视值还有默认值,还有传值的一个优先级,传值的优先级问题。优先级好,这个地方呢,给它来一个标题三,哎,标题三我把这个代码呢,给同学们板书到笔记中去,哎,就这个题。是吧,诶刚才我们是这讲的。啊,给他给大家拿到这里来,那以后呢,同学们再看代码就要注意最后的重要结论啊,或者重要的小结呢,就是老师这写的这么四句话,要有一个印象。
23:10
要有一个印象。好,把它放到这里啊,好,同学们,我们休息一会儿吧。
我来说两句