00:00
那行了,同学们,咱们继续再往下了,那么再往下呢,咱们还是得看一下这个。嗯,这个this啊,这个this还没有说完,我们来看看this什么时候不能省好吧。This test03。可以使用在实例方法中,那么this点大部分可以省略是不是?哎,This可以使用在什么呀?实例方法中不能使用在静态方法中,这是第一点,第2.this关键字大部分情况下可以省略,什么时候不能省略呢?那么什么时候不能省略?来,我们在这儿呢,写一下啊,This test03。Public static voidman。
01:06
是这样啊,同学们。呃,我刚才想起来一个什么事呢,我我昨天我自己听了一下我的视频啊,有同学这个在客屏里边说这个,呃,有的时候可能会听见这个什么西西的这个这个这个这个声音啊,呃,是不是这个声音,是不是这个声音。就是我我我这好像也不是什么口头禅啊,是因为这个话筒的这个问题,话筒离我嘴巴可能比较近一些,对,然后呢,我我在说话的时候呢,我可能会吸一口气。我吸一口气的时候,就这样,就可能会有有点声音啊,有点声音,那这个我我尽量避免啊,尽量避免,然后那个嗯。要有别的口头禅。别的口别的口头禅的话,咱们就那个什么啊,咱们就就就跟我说啊,别的别的口头禅咱就说说了之后我就避免就行了,这个这个这个吸气这块,这个可能是不太好避免啊,不太好避免行啊,这个我我尽尽可能避免啊,尽可能避免行好啊。
02:04
憋气啊,憋气可以行好啊,那个接着往下看啊,接着往下看,那刚才说到哪,说到这个this啊,可以使用在实例方法中啊,不能使用在静态方法中,不能使用在静态方法里啊,然后呢,这个this关键字大部分地方可以是省略啊,什么时候不能省略呢。我们来举个例子。比如说。我们在这里呢,嗯,定一个类啊,比如说学生类就很简单,一个学生类student。啊,Student'。那行,嗯。那么这个student这块呢,我们属性啊定义好啊,比如说学号,然后我们再加一个什么呀,姓名学号这块呢,我们给它私有化了啊,哎,比如说学号的话,我们in number,然后接下来姓名这块的话,我们加一个name,然后呢,我们提供什么呀,构造方法是不是哎无餐。
03:00
无餐的,然后呢,构造方法,我们可以给他提供什么呀,哎,有餐的,然后呢,再往下提供and什么呀,哎,And get方法。啊get方法,那么这块呢,我们把这个构造方法无餐的给他提供一下student是不是,然后呢,有餐的呢,给它提供一下,哎,有参的,然后接下来我们int,比如说I对吧,此这类型S,接下来number附上什么呀,I,然后呢,我们name呢所一个SS盖的方法这块的话,因因为你是有两个属性嘛,是不是你有两个属性呢,这块呢,就应该是有四个方法是不是,哎,四个方法那行了,那我们就把这个。方法这块呢,咱们写一下啊写一下。来这块呢,咱们写一下啊,比如说public void,然后呢,Site啊,Set set这块set number,然后接下来我们这呢,写一个什么呀,哎,Int int啊I,然后呢是number呢,附一个I。
04:07
对吧,然后接下来呢,我们在这再来一个方法,这个方法呢,返回叫get number,然后直接return谁呀?哎,我们那个number就可以了。然后再往下呢,再来一个叫做set什么呀,Name参数是string类型的是不是,然后接下来我们在这儿怎么怎么怎么做呢?Name等于S,然后public返回string叫做get name,然后接下来return谁呀?哎,我们的这个name。那么大家看这是一个set方法,这是get方法,这是set方法,这是get方法对不对?那我们这个程序到底能不能运行呢?哎,我们student s等于new一个student,然后接下来这是无餐的构造方法,然后S点什么呀,我们在这做做什么呢?s.S点这个。调一下set set number这个方法啊,叫set number这个方法,然后呢,1111来进去,接下来s.set name啊,然后接下来我们这边写上啊,比如说叫张三张三啊,然后呢,我们再来看。
05:07
我们这边system.out点打印吧,输出吧,哎,输入什么呀?s.gET什么呀,Number是不是,然后system.out.line打印,我们输入什么呀,叫s.get什么呀?哎,Name,那么这个程序呢,我觉得应该是没什么太大问题的啊。好,这个是学号,是不是这个是姓名啊,姓名叫做姓名啊,好,我们把这个呢给它编译一下Java c编一下this test03.java然后Java去运行this test03走。学号是111,姓名是张三,没问题的,没问题吧,哎,没问题啊,那行了,这是调用我们的一个无参数的构造方法,然后再往下呢,我们去调用我们的有参数的过通方法,比如说S2等于new一个student,那么这个时候呢,我把这个地方呢,我用一下,这个地方用一下,比如说学号是2222,然后呢,名字叫做李四,好,接下来我们把这个拿过来,然后放在这里,把这个改成什么呀?S2S2S2呢去调钙的方法,好吧,那有是无参呢,我也用了,有参数的构造方法我也用了是不是,哎。
06:15
那行了,这是两个学生对象啊,无参的,我再手动给他调set方法赋值,然后调get方法取值,然后呢,我在这个位置啊,我拗一个对象之后呢,我调这个get number get name,那这块呢,我们就直接取就行了,因为这个和这个是不是传进去了啊,传进去了啊来我们看看这个程序有没有问题,编译运行。学号111,姓名是张三,然后学号是222李,姓名是李四啊,姓名是李四,好了,那这块呢,咱们就呃程序是可以正常运行的,那么接下来分析一下啊,大家看这个程序呃,哪一块写的不太好,就是分析这个代码,分析一下代码哪块设计的不太不太好。就你分析一下啊,分析一下。以下代码哪里?
07:02
写的不好,就你虽然可以编译也可以运行,但是这里的程序啊,有一点有一些地方是写的不不是特别好,哪些地方啊。有知道的吗?你觉得这个代码写的哪一块不太好?你看private private啊,无餐构造,有参构造。啊,Set get set get。方法中的形式参数名没意义。太棒了,小鹏啊,感谢就是这个,大家看啊,这个方法里边有个参数,我在起名的时候,我起一个I。大家觉得这个可读性怎么样?是不是可读性比较差?就你一读是个I,这个I是个什么玩意儿,是不是,你说你set name参数是个string类型的S,你S是个啥?你S是个。对不对啊,你这个没有意义呀。对吧,可读性会比较差一些。所以呢,这个时候呢,我们有必要啊把这尤其像这个构造方法也是一样,你看构造方法看见了吗?构造方法这一块是不是有int I和词string s,是不是这个I和S意义都不是很大,可读性太差。
08:11
是不是,哎,怎么办呢?诶,于是乎啊,我就把这个方法改了,各位看好了啊。改了啊,改成什么了呢?我把这个参数的名字,为了增强它的可读性啊,我给它改成number了。我给它改成number之后呢,接下来我这个I是不是也得改成number啊。那如果我这样做,会有什么问题呢?各位。这样做会有什么问题?还记不记得我们Java语言当中有一个?语法叫什么?就近原则还记得吗?那如果为了增强可读性啊,我这样去做的话,那这个number说的是不是这个number啊,那这个no离这个no是不是最近啊,所以这个no是这个no对吧,这个no是不是还是这个no啊,所以这个no和这个no它都是这个no,和上面这个no是不是没关系啊。
09:05
所以这个时候就会导致出问题。你明白吧,就导致出问题,我不知道大家有没有理解我说的意思啊,原先的时候我们在这儿是写了ii呢,付给了这个number,而这个number呢,其实就是这个number。然后接下来呢,我们下边那个set number的这个呢,我们就会发现什么呢,发现把这个I呢,给它改个名字吧,改了名字好啊,因为可读性强啊,一改算完了,为啥呀,因为改完之后啊,这个number呢和这个number呢,都是这个number啊,这个和上面这个number就没关系了,我不知道大家有没有啊这样的一个想法啊,叫做什么呀,就近原则。加油中有个就近原则,就近取材,包括你现在的这个方法也是一样,你看。你看你把这个呢,直接拿过来,哎,你为了增强它的可读性啊,你可能会把这个地方改一改,改成name,当你改成name之后呢,接下来把这个name付给name,那你这个name付给name,这个name和这个name都是这个name呗,和上面这个name是不是没关系啊,所以这个时候就是也就出问题了,这个实际上也是就近原则是不是啊就近原则,那么如果程序改成这样之后,大家思考一下,我调这个无参构造方法会出什么问题。
10:20
我现在把后边的注释掉,各位后边不用看了,对前面这个会有什么问题啊。调无参数的构造方法,大家思考一下,是不是就相当于它是零,它是none啊,因为这个没有赋值,这是零,这是none吗?那么接下来去调用什么呀?我们的s.set number这个方法111就传给了谁,传给了他,是不是传给他之后它是111111再付给他,他和他都是他和前面这个没关系,所以这个值还是谁呀,零对不对,所以这块呢,调。s.get number是不是零啊,你s.set number111是不是没附上s.set name同样一样,张三只是付给谁了,张三呢,只是付给了张三他自己付给了自己,这个name和这个name都是,这个name和上面这个name没关系,所以导致这个name还是none啊,这个还是零,所以最后输出一个是零一个是none,所以我们来编译一下,大家看Java c去编译,Java去运行,好,大家看一个是零一个是那。
11:16
那么其实这个结果大家应该是可以猜测到的,对不对,哎,可以猜测到,那么我们针对这种情况该怎么办呢?对吧,我们以后总不能这样写吧,以后如果我们这样写的话,这个可读性就有点太low了吧,有点太差了,但是我们又不能这样写,我们如果这样写的话,这个还有这个和这个对吧,还有这个name和这个name都是这个name,那上面这个就没关系了,所以这个时候我们想到了什么呀,This点各位。什么意思呢?如果你这样做啊,这个N这。两个no都是局部变量no啊,和实例变量no没关系,所以代码还不能这么写,同样一样,下面的这个这个name也是这样的。
12:10
这两个name呢,都是局部变量name和实例变量name没关系,所以代码还不能这样写,那么这个时候大家思考一下,是不是我们可以考虑用一下this。什么意思呢?如果我前面加个this,这就妥了,明白吗?什么意思呢,就是这个no啊,是这个no。明白吧,但是这个no啊,是这个no。为什么这个no是这个no呢?因为前面有一个this点。这个this啊,代表引用,还记得吧。这是不是个引用啊。对吧,所以这个this表示当前对象啊,当前对象的number附一个number,而这个number呢,哎,就给它传过来,附到我们这个当前对象的number上,而当前对象的number是谁啊,是这个属性,所以像这种情况下,This点是不能省略的,所以这个this点的作用在这起的什么作用啊,This点的作用。
13:20
是区分什么呀,局部变量和实例变量啊,Number是什么?局部变量啊,是局部变量,但是this.number是指的什么量,是指的实例变量,它俩就不一样了,包括你这个位置呢,哎,你也应该怎么写呀,哎,你可能啊这样去做会好一点,怎样做呢,前边呢,你加一个什么呀?哎,This点,那这样的话,我们这个this点就不能省略了,各位啊,This点在这种情况是不能省略的。啊,不能省略的,好了,那么接下来如果改成这样,我们就把这个编译一下再去运行。
14:04
学号是111,然后姓名是张三,你看就没问题了。对吧,就没问题了,所以以后大家写的时候啊,还得这样写各位啊,This number等于number。对吧,This等于。啊好,那么接下来这个构造方法是不是也可以改一下呀。构造方法增强可读性,上面的构造方法也增强一下可读性,怎么增强啊,你可以不这样写呀,是不是?哎,你可以怎么做呀?This点对不对?这个是this点,然后这个变量的名字叫name,这个变量的名字叫什么呀?Number,这个是number附给this.number这个是name给什么呀?this.name啊,所以this点在什么时候不能省略啊?答案是什么?在实例方法中或者构造方法中,为了区分什么呀,局部变量和实例变量,这种情况下,这点是不能省略的啊,不能省略的,所以它有不能省的时候,各位啊,就在这儿是不能省的啊。
15:19
然后在这个位置也是不能省的。啊,在这是也是不能省的。啊,那再去编译这个程序,再去运行,大家看是不是就没问题啊,哎,没问题,我们把下边这个程序放开,是不是它也没问题呢?也没问题对吧?调这个构造方法嘛,是不是来接下来编译一下再去运行,你看。也没问题,学号和姓名对吧,哎,这个呢,其实就是this点啊,在什么时候是不能省略的。好了,同学们,那现在我问大家一个问题啊,告诉我get name这块,这个this点有还是没有,就是这个地方。有没有this点,这个this点能不能省略。
16:00
这个get name这个地方有没有this点,各位你先告诉我第一个问题啊,分析一下有没有对吧?这个this点能不能省略。哎,可以各位啊,为什么这个可以省啊。因为你这个大括号里边这个name只有一个。不会出现冲突的问题,而而这个name一定是谁,一定是你上面这个name。对吧,所以这个this点啊是可以省略的,它其实这个代码它的原样是什么?就是这个get方法,它实际上原模原样是啥?是return什么呀?this.name明白吧,Get name实际上获取的是当前对象的名字吗?就你听我这句话说的有没有道理啊?Get name实际上获取的是当前对象的名字吗?那你这个当前对象的名字,当前对象我们你是不是就是this啊。对吧,所以严格意义上说,严格意义上来说,这是有一个this点的啊,严格来说这里是有一个什么呀,哎,叫做this点的,只不过这个this点是可以省的,只不过这个this点是可以什么?哎,省略的啊,我不知道大家有没有去理解啊,有没有理解就你你你完全可以不这样写,你可以这样写对不对啊,你可以这样写return name啊return name就行了,包括我们上面的get的方法也是一样的,它的原样实际上是return什么呀,this.number的,只不过我们this点可以怎么着,哎,省略不写,我们直接返回一个number就是这样。
17:31
啊,所以呢,这个this啊,还是非常非常之重要的,各位啊,在哪些情况下可以省略,哪些情况下它不能够省略。啊,不能够省略,就是大部分情况下,大家看是不是我们昨天讲的时候都是可以省的呀,你随便是不是,哎,只有极少数情况下,像我们刚才所讲的,如果你用来区分什么呀,这个局部变量,这个这个这个局部变量和这个实例变量的时候,哎,你用this点呢,就可以区分开。然后你加上这个点,这样的好处是什么呢?实际上就相当于你这个呀,可读性要好一些。
18:03
可读性高,明白吧,一看就明白,你不要整个I呀,你整个S啊,整个I呀什么之类的,哎,你出来这个东西啊,效果不行,所以呢,你要哎建明之意啊,你既然要建明之意,那么这个时候我们就加上this点进行区分啊,这个还是比较重要的,大家注意一下啊。
我来说两句