00:00
好了,那么接下来咱们继续再往下啊,继续再往下。那么这个this到底用在哪里呢?重点各位啊,这里有一句话叫this代表的是什么?当前对象。好,在这里我先声明一下,This只能使用在实例方法中。谁调用这个实例方法,This就代表谁。我慢慢说,你慢慢去理解啊,This只能使用在实例方法中。啊,谁调用这个实例方法,This就是谁。所以this代表的是当前对象。举个例子,我在传授知识,各位啊,举个例子,比如说C1。
01:03
我去调用这个方法。大家看这个实例方法,前边是不是没有static?所以称这个方法叫对象方法,我们必须先拗对象,是不是才能去调这个刷屏方法呀?是不是啊,好C一点什么呀,Shopping。我这这个对象去调的shopping方法,那么在这个shopping方法当中,如果你用this的话,这里的this是谁?而且我告诉大家啊,This只能使用在实例方法中。这是实例方法吗?哎,那么这个this代表谁啊?This this是谁啊?This是当前对象。This指向了当前对象啊,这里的this是谁?是当前对象?那么C1去掉shopping,那我问你这个this是不是就是C,如果C2去掉这个shopping方法的话,那么现在请告诉我这个大括号里边这个this是谁啊?
02:15
是不是就是。我现在不告诉你知识点嘛,就this只能用在实例方法中,存图长这个德行,它出现在实例方法里边,调用这个实例方法的时候,谁去调用了你这个方法,This就代表谁。C1去掉shopping this就是C1 C2去掉shopping this就是c this就是C2,所以this永远代表的是当前对象。啊。就是说C调用。
03:00
This是C1C2调用。你一会儿就会感觉很巧妙啊,This是谁,是C2。This其实代表C2。对吧。哎,那么接下来呢,我想告诉大家一个问题是什么呢?是这样的,各位这样的啊,大家看好了,我们之前说没说过。这个实例变量怎么访问,还记得吗?告诉我。各位跟我互动一下啊,这块内容咱们互动一下才能够理解,我干讲啊,我也没底,各位啊,我也没底。就是这个这个东西。它是个实例变量对吗。之前我怎么给大家讲的。实例变量怎么访问?就是说这个东西啊,又等于又回去了,各位又回顾一下,或者说我不再给大家记笔记了啊,不在这记了。
04:05
就是说。我们啊。第一次在讲这个面向对象的时候,我记得写了一个例子。是在哪来的?第八个里边学生。零九吧。User。这个user这个类当中有这个username password,还有ID是吧。那我们现在是怎么访问他的呀?我们是不是把U的对象拗出来,用U1去访问IDU1U1U1去访问啊。UE是个什么东西啊?是个引用对不对。那么也就是说,我最初的时候,实际上告诉大家的是什么?就是我们一个类当中,如果这个变量,这个变量,这个变量要先访问的话,我们先把对象扭出来,然后通过引用的方式去访问,对不对?好,那我问大家一个问题啊,你难道没感觉这个程序很诡异吗?
05:09
大家好好看一看,你从来没有给我提出这个疑问啊,我也很困惑,第四十五行代码在这里访问了name,对吧?是不是?那么大家思考一个问题啊,Name是实例变量,实例变量必须采用什么?必须采用引用点的方式?访问对吗?那现在我问大家一个问题,这个位置我写这个name,这样写是不是就错了呀?对吧,你前面应该有一个引用点才对呀。是不是你没有写这个引用点,你想想你这个是不是错的呀。哎,你看你编译一下他的错没错啊Java c编译一下test01.java。哎,有意思,this1.java编译通过了。
06:02
那这说明这个name前面有没有引用点呀。有吧?只不过你这样是不是可以不写呀?那这个引用点是谁呀?这个引用点实际上就是this点。省略可以不写,你好好想想啊,大家听我,听我说啊,听我说先不要去去去说别的,我问大家问题,C1叫张三,张三在购物对吗?C1去shopping,我问大家一个问题,按正常来说,是不是shopping这个方法这块应该是访问C一点对吗?是不是c1.name正在购物,那我问大家,如果有一天CR对象这拗出来了,用C2去购物的话,我问你是不是我们大括号里边应该是C2的name啊。对不对?好,那我问大家一个问题啊,为啥C1不能往这写,为啥C2不能往这写?各位告诉我为什么?
07:04
为什么呢?再给我互动一波。为什么这个C1不能往这写,C2不能往这写啊?不是写死了了。是什么呢?是C1C2,压根儿就是我们问方法的局部变量。局部变量int I等于100,我就这么问吧各位,这个I这个东西在闷方法中有效,到了这个方法里边还能访问这个I吗?这个I显然是一个局部变量,那如果它是局部变量的话,C1和C2是不是都是局部变量?那如果C1C2是局部变量,那我C1在这能用吗?我C2在这能用吗?有同学老师,我干嘛要写C1,我干嘛要写C2,因为我之前我就给大家说了内幕,这个东西是实例变量,实例变量是不是得有对象才能访问。
08:06
你现在直接在这访问这个name,你没有感觉很诡异吗?没有一个学生问我这个问题,说老师,为什么这个name可以在这访问呀?为什么这个name可以在这访问?我之前说过,这个name是实例变量访问,必须有引用点的方式去访问,为什么没有一个同学问我这个问题?当我写出这个name的时候,你们应该有一个疑问,就是说前面老师为什么这不应该有引用点吗?没有引用点为啥这个name就可以访问呢?对吧?哎,那么大家思考C1去shopping的话,就意味着这个大括号里边这个name应该是C1的name,如果CR去调这个shopping方法的话,那么这个C2这个位置其实就是c2.name。但是我不能把这个位置写成C1,我也不能写成C2,如果写成C2,是不是就固定成C2了?如果我写成C1,是不是就固定成C1了?这是胡浪所说的,或者说我写C1,或者说我写C2的时候,根本我就写不了,因为这个变量没在我这个方法里边,这个变量是在这个位置上,称为局部变量,对吗?那么这个时候既不能写C1,又不能写C2,那我可以写this吗?好,各位,This其实就是谁。
09:19
C1,当你C1去调这个方法的时候,这个方法里边这个this代表的其实就是C1,当你去C2去shopping的时候,这个方法执行过程当中,这个this就代表的是C2,也就是说实例方法里边这个this代表的this就是什么?就是当前对象,你当前对象怎么理解?C1去购物的话,你this就是C1,当前对象就是C啊,你C2去购物的话,那当前对象当然是C2了,那这个位置你不能写C1,也不能写C2。你写谁啊?你写this。所以this就是当前对象啊,所以这个时候我们去编译这个程序,我们再去运行this test01走,好,大家看是不是张三正在购物,李四正在购物,为什么这个位置输出张三,在下就要输出李四呢?
10:08
为什么呢?为什么这个和这个不一样呢?原因是我们丢了两个对象,一个是张三,一个是李四,你这个位置C1去shopping的话,其实这个this就是C1的name,你C1的name是谁?你C的name其实就是张三嘛,你C2如果去shopping的话,我这个位置其实就是,哎,还是this,只不过这个就相当于是C2,那么C2的name是吧?那当然是李四,但是你不能写C1,你写个C1,你看你编译能不能通过呀,编译就报错了,找不到符号,说你C根本就不存在这个变量C1对不对,那么如果你写C2行不行,也不行,我们再编译肯定是不行的,对吧?C2现在是找不到符号,那么接下来如果你不写C1,不写C2,你写this行不行?哎,这个可以没有任何问题,你看this代表的就是谁啊,当前对象,这个this代表的就是当前对象。明白吧,所以说这块呢,对,在内存方面,我先说一下this,它是这样去存储的,This是对象内部当中的一个东西啊,然后呢,它用在实例方法当中,代表当前对象。
11:13
代表当前对象,用在实例方法里,这个this代表当前对象,当前对象。各位啊,当前对象好好理解一下,哎,那么这点讲了半天,这点能不能省啊各位,哎,This点是可以怎么着省略的,就讲了半天白讲是吧,可以不写。可以不写。省略可以不写,不写的情况下就是访问当前对象的name,注意啊,This点省略的话,还是默认访问当前对象的name,你明白吗?就是说你这个this点写跟不写一样,你写上代表的是什么,是我当前对象的。对吧,什么时候不能省我会讲啊,This点这个东西我再强调一下。
12:04
强调一下啊,你写上它代表是当前对象的名字,你不写它访问的这个name还是当前对象的name。来再编译。张三正在勾,李四正在勾。This。第四,This点大部分情况下是可以省略的。好,注意听啊,我们思考一个问题。为什么this不能使用在静态方法中?静态方法我写一个。
13:05
为什么在这?不能用this。为什么不能用this?因为我们调do some方法用什么调,这静态方法用什么调,各位是不是用类名去调。是不是用类名去调这个do some方法?对象有没有?对象有没有?是不是在这个过程当中没有当前对象,而this代表当前对象对吗?实际上是不是就矛盾了?This代表的是当前对象,R静态方法的调用,不需要对象矛盾了。这是一个静态方法,明白吗?调这个方法不需要有对象的参与,而this恰巧又代表当前对象,那你说不是矛盾吗?你当前对象有吗?你是用一个类名去调的我,你又没有对象去调我,你没有对象去调我,这个this又代表当前对象,你不矛盾吗?是不是?哎,所以这个地方静态方法不允许用this。
14:22
Java c.e好,大家看第61行错误无法从静态上文中引用,非静态变成this,就这个this在这儿是用不了的,您就放心吧,这个用不了,This不能出现在经典方法中。好,那么接下来我再给大家出一个题,各位看好了啊,你如果真的学会了,你肯定能经得起我这个折腾。各位看好了啊,你到底是真的学会了还是假的学会了?我给你出道题,一下就能测出来你到底理解还是不理解?来class这边有个student,然后接下来我在student里边有一个string类型的name,然后在这个位置有个public static,然后VO test有一个M1方法,然后在M1方法里边。好,请告诉我能不能访问这个name。
15:12
行不行?能不能访问这个name?这个地方有个内蒙,我在这个方法里边能不能访问这个内蒙。为什么不能分析一下?为什么不能访问这个name?好,我问大家一个问题啊,咱们一步一步分析,好吧,今天一定要把这个分析明白啊,各位,请问同学们这是个什么变量,是不是实例变量?好,那我再问大家一个问题,实例变量怎么访问?怎么访问实例变量必须先干什么?你对象?
16:01
通过引用点对吗。是不是通过引用点来访问?这个没跑了吧,好,各位再问大家,这是不是一个静态方法。是不是静态方法,静态方法对不对?好,那么接下来我问大家问题,静态方法这个name是不是一个实例变量?那实例变量怎么访问,是不是引用点?那么也就是说这行代码它实际上是不是前面有一个引用点呀。对不对啊好,那各位这个引用点是不是只能是this点。那反过来我问大家能用在静态方法。This不能出现在静态方法中,对吗?所以这个name能访问吗?
17:00
能访问吗?啊。能不能this代表的是什么?当前对象对吗?你调这个静态方法是不是直接用类名去调呢?当前对象有没有?没有当前对象,你怎么做呀?所以this在这儿不能用,就导致什么你在这儿访问这个name也不能访问。这个name是什么?Name是当前对象的名字吗?对吧,你静态方法调这个静态方法哪哪哪有啊。哪有对象啊,你用泪去掉的呀?对吧,所以我们把这个放开,你会发现编译报错。第77行错了。这儿不行,我们把这个name放开来,我们再来编译这个词是第几行,第74行又错了,总之你74,还有这个77,这两行都不行,你不能这样访问,你也不能这样访问,原因是你访问name的时候,它永远访问的是当前对象的name,你name是个实例变量,而你的方法很诡异,是一个静态方法。
18:20
静态方法,除非你这样做明白吧,除非你这样怎样,你student student student在这knew一个student,然后你用S去访问能不能啊。各位告诉我行不行?这个行不行,这个。这次我在这个静态方法里边,我就一个对象,然后我用引用去访问行不行。没毛病吧?因为你内是实例变量,我可以用引用点的方式去访问啊,所以这就没问题了。但如果说你要是把这一块注释掉,你把上面这个放开,那是绝对不允许的,你这样肯定不行,防不了内蒙,其实思考有问题,不能让你访问内蒙。
19:13
但你下边这个可以啊,你自己手动捏一个对象,你再去访问,这还不行吗?这肯定可以啊,没问题,除非你这样,但你不能直接在这个方法里边直接访问这个name,有同学说老师啊老师啊,你越讲的越糊涂了,你不是当前说说过一句话叫出了大卦就不认识了吗?出了叫出了。大括号就不认识了。出了大框就不认识了,有的老师你看这个name在这个大块里边啊。哎,这个大括号里边按说应该能访问这个name吗?诶错了各位错了啊,不是100%的。啊,那要看你这个内容啊,它是个实例变量还是个静态变量,如果你是一个时代的一个修饰的,那妥了,在这个静态方法里面能不能访问啊可以,但如果你是一个实例变量的话,那你这个变量就是对象,你得先有对象才能访问这个内。
20:07
对不对,哎,那你访问这个name,你想你你这这边实际上就是默认就是this点啊,你this不能出现在静态方法里边啊,所以这访问不了啊。这很正常啊。是不是好,那我问大家一个问题。什么时候方法定义成静态的,什么时候方法定义成实例变量实例方法。就还是又回到上午那个问题了啊,就是又回到上午那个问题上了,又。回到上午的问题了,么时候方法定义为实例方法?什么时候定义为静态方法?你听我这句话啊,有没有毛病?如果如果方法中。直接访问了实例变量,该方法必须是实例方法,有没有毛病?
21:03
这句话有毛病吗?就如果方法中直接访问了实例变量,就是直接在大括号里边访问的这个变量是一个实例变量的话,那么这个方法是不是必须得是一个实例方法?如果方法直接访问了实例变量。该方法是不是必须得是实例方法?你好好想想,今天上午我是不是曾经说过这句话,一下把大家干懵了,好几个同学给我跟我说,老师这个实例方法这块没听懂。我说了两方面,一方面是从思想角度出发。一方面是从代码的语法上出发,从代码语法上来看的话,如果你这个里边直接访问实例变量的话,那你的方法得是个实例方法。你是静态方法,你了幕。
22:02
你见你怎么跑到那吗?你访问了,那你这个就得去掉。那如果你这个直接访问的实例变量,你这个方法是不是得实例方法呀。这是从语法上,从思想上,我是怎么说呢?从思想上我是怎么说的?如果这个行为是对象级别的行为,就把这个方法定义成什么?如果这个方法你比如踢球,你会踢球,我也会踢球,踢的效果不一样,那这个方法踢球这个考试对吧,那这个方法是不是都定义成实例方法。这是从思想上出发,从代码角度来出发,如果你在大块里边直接访问了实例变量,你访问了内蒙对吧,像这种情况,那我OK,你这个就就必须得去了,你不能带着,你带着这个static不行,你带着static,你这个你访问不到。因为这是this.name这个this在静态方法里边用不了,This当中是this不能出现在静态方法里边的。所以就尴尬了,现在我再问大家问题,为什么?Set get方法是为什么?
23:03
盖的方法是实例方法。各位,为什么set get方法是实例方法,Public void set name,这不name吗?是吧?That name string name来返回string叫get name return name。为什么set方法和get方法不能加static,为什么这块加上static就出问题?好,我问大家问题,在这个方法里有没有访问这个name,这个name是不是一个实例变量?实例变量,我问大家是不是必须得先创建对象,通过引用点来访问,所以这个name前面是不是有一个引用点,而这个引用点省略的话,是不是代表this点啊好,我问大家this能不能出现在静态方法里边。
24:02
不行。不能出现在静态方法当中,因为在这个方法当中,你调get name这个方法你在执行的时候,这个name就是当前对应的name,你加上static,那这块是不是就this this就用不了了。你好好想想啊,好好想想。好了,那这个this呢,我就准备讲到这儿,各位啊,今天呢,我就不再往上讲了,为什么this不能使用在静态方法中,我把这个总结一下,为什么不能用在静态方法中。This代表当前对象,静态方法中不存在什么呀,当前对象。啊。来各位这块啊。很有意思。
25:01
这样我再出一道题,各位。Class this test02。在这有一个in特I等于100PUBLIC static void men,在主方法里边,我就问大家一个问题啊,这个I在这儿能不能访问?嗯。行不行分析啊,I变量在main方法中能不能访问。来,我问大家问题,这是个什么方法?静态方法对吗?好,这是个什么变量?实例变量对吗?好,这个变量是不是必须得先用对象才能访问?
26:12
这个I变量是不是必须先new对象才能访问?好,那我问大家闷方法当中,你直接访问这个I行不行。方法是一个静态方法。调这个方法的时候,是直接通过这个类名去调的方法。行不行啊。那肯定不行啊。那肯定不行啊,你没有对象啊。你这有意思吗?没有this点对吗?为什么呀?因为是方法是静态的,这里面能有this吗?没有this对不对,所以这个I是不是访问不了啊。
27:10
嗯。你看第一行。是不是?哎,防不了,怎么样才能访问,哎呀。你可以new对象啊,你可以把这个this test02给他new一个出来呀,你拗完对象之后,你通过这个TT能不能访问呀。这样行不行?你有对象行不行?可以,没问题。Java运行this。
28:00
零二啊,可以呀。好了,那我再问大家一个问题啊,如果在这有个静态变量呢。Static k等于111,我在这能不能访问这个K呀?通过类名点什么呀。静态变量,静态的不用类名去访问吗?是不是类名点访问。那就没问题了。111是不是那名点能不能省啊?这个闷方法和这个有没有在同一个类里边。
29:00
雷明点能不能省略?可以跟那个方法是不是一样的哟。所以在这点out点打印输入K行不行?那没问题啊。是不是啊,你总之所有的东西啊,它都有自己的访问规律,你能不能访问,应不应该这样访问,它都有语法限制,你不能随便来。你就相当于我们上边这个程序一样,你这个地方为什么可以访问name啊。因为你这个方法是一个实例方法,我调你这个方法的时候,是有对象参加的,一个对象去执行这个购物的话,那你说这个name是谁啊。这么说吧,同学,假如说我去沃尔玛购物去了,那你说这个name是谁的名字呀?是不是我的名字啊?有道理吧?哎,你想我推着购物车,我去沃尔玛购物去了,那在这个购物过程当中,这里。输出一个名字,那这个名字是不是应该输出杜巨斌呢?
30:00
如果咱们班的这个这个何伟斌同学去推着购物车去沃尔玛购物去了,他执行这个购物动作的时候,执行过程当中输出这个name是不是应该是何伟斌啊。是不是应该谁去购物,这个name就是谁啊,就是谁的名字吧。所以这个name是不是代表的就是当前对象的名字,其实就是this点对吗?这个this代表是不是当前对象啊,谁去调你这个方法this它就是谁啊,你比如说我去沃尔玛购物去,那这个this其实就是我喽,如果是何伟斌去购物的话,那这个this就是何伟斌喽。是不是,哎,所以这个this其实代表就是当前对象嘛。但你永远要记住这个name,它由于前面没有加sta,所以这个变量称为实例变量,你总之实例变量这种东西就必须得创建对象才能去访问,前面是有个引用点的方式去访问的,那既然有一个引用点,那你这个引用点到底是谁?你不能是C1,你也不能是C2,你为了通用,你写一个this this,它既代表C1又代表C2,所以this的功能很强大,那么this代表是当前对象嘛。C1去调这个方法,那这个就是C1呀,那如果是C2去调这个方法,那这个就是C2了。
31:10
那你既不能写C1,不能写C2,你可以写个this啊,哎,但是搞了半天this点可以怎么着啊,省略直接写个name就可以了。啊,这点是可以省略的。可以省略的,但我这里呢,说了大部分情况可以省略。但有一些情况是不能省的,我们下节课再看什么时候,这点是不能省略的,好吧。
我来说两句