00:00
好,那接下来呢,咱们来讲一个关键字,哎关键字呢,属于咱们说的三条主线当中的第三条啊,第一条主线类和类的结构,现在咱们把这个最重要的,呃,属性方法构造器呢都讲完了,剩下这两个,一个代码块,一个内部类呢,放到第六章啊,就是面向对象的最后一章中去讲啊,使用的频率呢比较低一些,然后第二条主线呢,叫面向对象的三大特征,哎,封装性呢,咱们已经讲完了,哎,对,继承性,多态性,这个咱们放到第五章当中来讲啊,那么这三个特征当中呢,封装性啊,大家其实现在想想,嗯,其实应该说不太困难。是吧,诶主要呢,就通过这几个权限修饰符呢,咱们去修饰这个类和类的内幕结构,哎,体现它的一个可见性的大小了哈,呃,那么这个继承性呢,其实也比较好理解啊,下一章一上来咱们就讲这个了啊,然后这个多肽性呢,属于这三个里边比较难的一个啊,经常呢,有同学呢,就学完以后呢,一说什么是多态性,嗯,哎,不知道什么是多态性是吧?哎就是具体大家还是要看代码当中怎么去写,哎,通过代码呢去理解啊,讲到这的时候呢,大家都注意这个多态性,这是我们说的这个第二条主线啊,这两个放到下一章第五章中去讲,然后关键字,诶现在呢,第三条主线,咱们讲一个关键字,就是这个叫this。
01:17
啊叫这个Z次啊,那实际上也是基于咱们的一个实际,呃,开发中的一个需要,所以咱们呢,要用到这个Z次了啊才来引入来讲的啊呃,先来看这样的一个说明啊说这个在Java当中,这次关键字呢比较难理解,哎它的作用呢,和它的词义很接近,怎么怎么样的,哎这块呢,我们就具体呢,就不看这个描述了,哎主要呢,通过这个代码,诶带着大家呢去体会这个这次呢是干什么用的,诶我们也基于这样实际问题的需求,咱们去引入啊,就像咱们上午讲这个封装性一样,哎封装性的话呢,咱们也是由于这个实际的诉求,所以呢,我们才要引入这个封装性的。啊,就是大家呢,后边学一个知识的时候呢,其实都可以,诶慢慢的去从这个这三个角度去理解,就是叫3W,呃3W就是学任何一个知识点你都可以呃去从这三个点去考虑哈,首先这个东西到底是什么对吧?然后呢,诶为什么要出现这个东西对吧?哎,对后边一个就是how如何去使用。
02:23
啊,就是任何一个知识点呢,大家都可以从这三个角度呢,你去理解啊,哎,这个东西是什么,这个可能有的时候呢,一两句话呢就说清楚了,那么你要呃知道说这个这个这个它是怎么回事,那你要也要关心,为什么要用它啊,他用呢,肯定有它的道理是吧,那就是为什么要用它,这个要要想清楚,或者讲课的时候呢,一般我也都会讲清楚是吧,为什么要用它,诶像我们这个封装性为什么要用它呢?诶比如以它这个,以这个封装这个属性为例,这就是我们说的这个原因啊,我们要给它加入额外的限制,但是目前呢,我们直接调属性是限制不了的,哎,所以呢,我们才想到用方法啊,哎,这就是在我们这个封装性这一方面的一个Y,诶其他的你看具体什么问题呢,在讨论是如何是吧,Y,然后这两个呢,其实并不是最重要的。
03:16
啊,就是你这块整的透透的,没有用,这光会说属于啊,呃,关键呢就是你得看怎么用,呃这个呢,你是需要花时间花精力的,或者更需要关注的。啊,是这个问题啊,那现在呢,咱们讲这个Z呢,其实也是一样啊,总结的时候呢,大家也可以从这三个角度去考虑,诶为什么要用Z啊,它到底是个什么?哎,到底该怎么用啊,哎,是这个问题啊。行,那下边呢,咱们来说这个Z啊,也是通过一个实际的情境呢,咱们来引入啊,那这块呢,这里边又不少了,我呢再去新建一个包。哎,这个叫JAVA2啊,这些呢,我们就都给它关掉了。哎,在这里边我们去新建一个类啊,咱就熟悉人,所以我还造这个人啊,哎,就是让这个场景这块的话呢,尽可能贴近大家熟悉的,在这个熟悉的场景当中,我们来看这个陌生的知识,这呢叫这次关键字的使用。
04:16
行还是呢,从咱们这个实际的一个问题出发啊,大家看我这儿呢,声明一个person,哎,目前为止呢,就是属性方法构造器啊,就这三个结构啊,哎,我这呢写死string型的name,写性的age,哎然后呢说讲了封装了好封装以后我们加个private。嗯,那为了呢,我们在外面呢,方便的去调用和设置这个属性,咱们去提供get和set方法。啊,这个我已经写了好多遍了啊,写到这一遍的时候呢,已经差不多有点反胃了,这个大家写的时候呢,你要找到这种有点恶心的这种感觉呢,差不多就到位了一下edge。
05:14
好,写完了,写完以后咱们在这呢测试一下,这个都是咱们前面讲过的这个内容了啊,我呢首先造一个对象P有一个person,那这呢,咱们用的这个默认的空参构造器啊嗯,那么此时的话呢,我通过这个PE,我去set一下edge吧,设置这个设置个值是一,然后接下来我们去sit out一下,P一点,Get一下edge。啊,这显然呢,也是一。行啊,这是OK的,没有问题,那下面的话呢,我们看这个事儿哈,我们回归到关于这个person类这个类当中,在这个方法当中呢,哎,我们尤其是这个赛的方法,咱们呢,都写过这个行参,哎行参的意义呢,就是给我们对应的这个属性呢去赋值。
06:04
那前面呢,我们又讲过,在这个行参呢附呃这个声明的时候说,毕竟呢,你是一个标识符,标识符的话呢,咱们就要讲尽可能的要建明之义,就是我看到你这个名呢,我就知道你大概想干什么。啊,你要出于这样的一个解释的话呢,我这写个N实际上有点抽象,那我们就特别想把它写成内幕,哎,这样的话呢,我就明显的知道,我就是给我们这个属性同名的这个属性复制的。那这个呢也一样的,我就想写成A纸啊,然后这块呢,改完以后呢,你把这个这不也都相应的得调一下嘛,哎,我们这个事呢,就这样干了,然后就干成了是吧?哎,干成以后呢,一运行出问题了,零。按说该是一的结果出来个零了,那说明这事干的不太好,不太漂亮是吧?哎,这时候回过来你得看一眼啊,这个改成内了,首先呢,编译是没有报错的啊。
07:02
嗯,也许有的同学会担心说,诶,我这个name这个它的一个作用域是这个大括号。从这个大括号呢,一直到这个大括号,然后呢,你这也有个内幕,你这个范围是在这按说呢,咱们这个属性是不是覆盖了你这个方法里边啊啊按说是覆盖了啊,那在覆盖的这个范围之内呢,说出现两个同名的说诶怎么不报错呢。呃,首先说呢,他确实不报错哈,这个不报错的原因呢,就是他俩呢,其实地位不一样,不冲突。啊,你要地位都一样的,比如说都在这个方法里边,大家都是一个方法内的,同一个方法内的局部变量,那你就不能重名了,咱俩地位不一样,我们是有办法给咱俩区分的,所以呢,哎,这时候重名无所谓,没事儿啊,但是目前为止呢,咱们确实没有区分开啊,你看我这时候呢,这写成内幕以后,下边呢,你看。我要是点一下这个它就跑这了,点一下这个呢,也跑这来了,原来不是的是吧,原来我们这写成一个N的时候,这是一个N的时候,你看这个颜色变了啊,我点那个name的时候就跑这来了,哎,他就认为这个是属性,这个呢是行参,但是你要是把这个行参也改成叫name的时候呢?啊,这时候就变了。
08:19
哎,这个你也可以理解为这个叫一个就近原则了,哎,他就优先呢,考虑离它近的这个,哎,变量名去使用了啊,那这块呢,这不就出问题了,相当于咱们这呢,刚才用的是这age哈,Age呢这是一,相当于我们把这个一呢又付给了他自己,跟这个属性没关系了。显然是不可以的,哎,显然是不可以的啊,那么这个时候呢,我们怎么办呢?怎么去区分,前边这个叫属性,后边这个是行参呢,对咱们呢,就引入一个关键字,就叫做ZZ,哎这个呢,我们加上了一个点哈,这个this呢,可以把它理解为叫当前对象。
09:05
哎哎,叫当前对象了哈,那我这呢,就是当前这个对象的,咱们不是通过对象调属性调方法都是点嘛,所以你这是个对象了,那个对象点点出来的不是属性就是方法了,那咱们这个点的是个变量了,那显然它就应该是个属性,所以说此时呢,我们这个A值,你看我点出CTRL键啊,它就认为你这是个属性啊,而后边这个没有加C词的呢,我一点它认为你是一个形参。啊,这就是我们说这次的使啊,其实挺简单的是吧?哎,我们前面这个呢,也加上一个这次点哎就能做这个区分了,哎前面这个呢是属性,后边这个呢是行参,那么加完以后我们再看一下这个set。OK啊,这就正确了。啊,那后边呢,我们就都可以这样去写代码了。啊,那么为什么以前我们不写,现在非要写呢?实际上就是因为我们这个行参跟我们这个属性重名了,以前呢没有写,哎,只是说我们给省略掉了。
10:09
啊,就是咱们前面写的这个代码哈,这不是咱们,呃这个这个还还不行是吧?呃,有这个盖赛的方法的啊,比如这块吧,这块呢,咱们那会儿做的这个题目,说这个属性的情况啊,哎,这个在这块的话呢,其实前面这个这次点你也可以加上。只不过呢,原来的时候呢,咱们这个呃,行参名和我们这个属性名呢,他俩也不重名,我们就没有必要非得把这个Z点加上了。但是现在的话呢,因为他俩重名了,那我就必须呢,通过这个C4点的方式呢,得区分一下他俩了,哎,是这样的一个原因。哎,是这样一的原因啊,这就我们说的这个this啊,那我们在这说明一下啊,嗯,首先呢,我们看到这个this呢,可以用来修饰的是不是这个属性啊,哎,这也是我们它的一个使用点啊,首先我们看一下这个这次可以用来哎修饰,哎我们看到了可以用来修饰属性,那其实呢,它除了属性之外呢,还可以用来修饰方法,包括这个构造器,哎,咱们就一个一个来展开来说啊哎,首先呢,咱们来看一下这个Z,它来修饰这个呃属性。
11:20
哎和这个方法的这个情况,刚才呢,咱们说了一下这个这次来修饰的是这个,呃属性是吧,在这里边呢,我们把这个Z哎它呢理解为啊叫当前对象,哎,我们把这个这呢理解为叫当前对象,哎,那我们就加上了个这次点。那像咱们这个时候啊,我通过p.set edge,那其实我们这个时候的这次呢,相当于就是P。啊,就是你这个P的这个属性H啊,那有没有同学会想说,为什么这块不写成P啊。对,你这叫P,我一会儿这要叫P2,你这咋整是吧,再说了,你是先有谁后有谁啊,是先有泪是吧,后有的对象啊,那我有泪的时候,我哪知道你这个对象想叫什么名啊。
12:16
所以这块呢,咱们只能动态的去写一下,只能用这个这次啊,你这样叫P1了啊,那我这次就相当于叫P1,这叫P2了,我这这次就相当于叫P2,所以这算是一个动态的这样的一个过程啊呃,一说到这儿呢,就说到有的同学呢,就是把这个代码呢,发给大家以后啊,有同学呢,下来去写代码说呃,这个第一遍啊,先照着老师的这个写是吧,左边呢就放我的代码,右边呢就放他的代码开始写了,就比如说这个程序吧,上来以后一上来啊package咔咔敲一下是吧,然后把这个注释哒哒哒敲一遍,然后到这块开始写这了啊上来就开始写测试了,一路报错呀,泪还没写呢哈,这就一路叉是吧,然后就忍了,然后呢,一一直到最后这个大框一斜,然后哗瞬间都没有了,哪能这样写代码是吧?那大家都笑了哈,你不得先写这个类吗?你不能从上到从上到下的顺序啊,我把这个类写下边你。
13:16
不得也得先写泪嘛啊,别整反了啊,泪还没有呢,上来就开始这个,呃,这个掉这个泪了啊,那那肯定一路一路叉了,行先有下边这个啊,所以说呢,我们先造这个类的时候,我我还不知道你这个对象到底叫什么呢,所以咱们用这次来充当的啊,是这个情况啊,包括呢,你看我们这次呢,说也可以来调方法,哎,那我们举个例子啊,哎,这个叫it。还说人吃饭大。哎,说这个人学习,哎这样子。好,这呢是咱们说的两个普通的方法啊,那咱们前面讲方法的时候提过,说方法内呢可以调方法,比如在这个it里边呢,我们去调一下这个叫study,哎这样子啊来,那我们这块呢,来调一下这个it。
14:15
哎,那我们这时候执行,哎,就会出现这样的情况了,哎,我们先呢,调的是这个it他自己的方法体,然后在内部呢,又调了一个叫study,诶这是没有问题的啊,那这个study其其实它的前面呢,也省略了一个C4点。啊,就是哎,谁调这个it方法,我就调它的study方法啊,其实前面这个C点呢,原来我们也都给省略掉了,那类似的呢,像这块啊,像像这些呢,咱们都给省了。都省了。啊,也就是说呢,大家原来呢,呃省的呢,只是说呃原来这个没写,只是说给省了,哎,要给他加上的话呢,其实都有啊,那咱们现在为什么还非得让写呢?只是因为咱们刚才提到了这样的这个情况了。
15:07
哎,所以咱们把这个呢描述一下啊,现在呢,咱们这边都是在方法中来使用的啊,这个它可以来修饰属性和方法啊,理解为呢叫当前对象,比如说我们说这个在啊这个类的方法中啊,说我们可以使用啊这点这样我用双引号吧。说在类的方法当中,咱们现在这不都在这个get set呀,或者it啊这些方法里啊,在类的方法中我们可以使用呢,叫Z点哎属性或者呢,哎是这点这个方法的方式,哎调用哎当前哎这个类中的哎或者准确的时候呢,应该是调用叫当前对象的啊哎的属性或者呢是方法。
16:07
啊,这是这个情况说,但是呢,哎,通常情况下呢,我们都选择省略C点。哎,我们都选择省略,诶这个this点。哎,这是咱们通常情况下,就原来呢,咱们讲这个这次之前呢,通常都省了。啊,那么在特殊情况下呢,我们就不能省了啊,那么特殊情况下说,如果这个方法的形参啊,和这个类的属性重名了。通明时啊,那么我们必须呢,呃,显示的。啊,显示的啊,使用这个。
17:05
哎,这是点这个,这是点这我写个叫变量吧,哎,这点变量的一个方式。哎,方式哎表明哎此变量呢是属性。嗯,然后呢,而非哎这个星灿。看看这个能看懂吧啊在整个顺一遍哈,说我们在这个类的方法中呢,可以使用这点属性或这点方法来表示呢,咱们调用当前这个对象的这个属性和方法啊,但是通常时候呢,咱们都省略了,以前咱们都省啊今天呢,说了一个特殊情况,就是说当我们这个方法的行参和这个类的属性呢同名了,这时候呢,我们区分不开了,那这时候呢,就必须呢要显示的写上C点了啊,这点我们这写的这个变量,这个变量呢,呃,到底是属性还是行参加上C点的那都是属性。
18:00
啊,就不是行参了啊,这是我们说的这样的一个问题啊,诶2.1这样的情况,好这呢咱们体会的呢,是在这个方法当中用这个Z4点属性或方法了,那我们构造器是不是也有类似的问题,你看我这写个public啊,这呢我们就要person,诶这呢还没什么问题啊,那我再写一个public带参数了,这个我写一个死锥形的,原来呢,我们写的是N,我刻意的避开了,说跟我们这个属性透明的情况,现在呢我就不避开了,我就让他写内,那这个时候呢,你也是写name,这就会有同样的问题,哎,后边这个呢,让它表示行参,前面呢让它表示的是属性。那必须得加上这次。哎,得这样了,哎你要这样加的话呢,类似的,这不是还有其他的一个情况啊,这来一个这个in特性的A,哎这这样写了,哎然后我们还可以写个两个参数的都得呢,加上这个Z4,哎这不就得这样写了。
19:14
呃,其实跟咱们上说的刚才这个方法呢类似,只不过呢,就是此时这个Z次呢,咱就不能说叫当前对象了,因为这个时候呢,正在造对象,哎,我们呢,可以理解为呢,叫当前正在创建的对象的,诶这个属性。啊,就是语言上呢,就稍微呢变换一下啊,这是说的它,所以我们这个Z呢,大家可以理解为呢,叫当前对象或。啊或呢就是当前哎正在创建的对象,哎,就是稍微严密一点,这个呢,主要适用于咱们在构造器的时候用的啊,所以我在这呢写一个2.2,哎其实跟它这块呢,整体来讲是类似的,哎你看啊,我们呢可以在类的构造器中。
20:02
诶,使用这点属性或C点方法的方式,构造器里边也可以调方法啊。比如说我们这个,嗯,我写到这儿吧,我也可以写Z次点it,就是调我们当前正在创建的这个对象的it方法,哎,是这个意思啊,说呢,我们在构造器中呢,可以使用这点属性或这点方式调用当前哎正在哎创建的这个对象的属性啊或方法。啊说,但是通常情况下呢,哎,我们呢,都选择省略这个这点了,那特殊情况下,如果构造器的行参。和类的属性同名时,我们必须显示的使用这点变量的方式表明此变量是属性而非性彩。能理解吧,哎,其实这块使用的话呢,就是构造器跟方法呢,都会有同样的问题啊,一般的时候呢,咱们都省略了,但是如果出现同名的时候,大家一定要加上这次点,其实呢,总结一下就是很简单的一个事儿啊,原来的那时候呢,该怎么写怎么写,一旦同名了,加上这次点over啊就完事是吧。
我来说两句