00:02
行了,那咱们就接着看吧,各位啊,咱们接着看,呃,这块的东西呢,其实是比较关键啊,比较关键就是怎么去画这个内存图,然后根据图呢,去得出这个程序的执行结果,希望各位呢,下去之后啊,能够多写点自己的这个程序,然后呢,自己去画一下这个图,画完图之后呢,哎,去想一想,思考一下,好吧,去思考一下,然后这个呃,在程序没有执行的时候啊,你就思考一下呃这个代码。它的执行结果是什么对吧?哎,这样的话,咱们内存图才有意义啊,内才有意义,那行那这块呢,我就先把这几个文件先关掉了啊,先关掉了这个也先关了它。然后这个呢,也先关了它啊。嗯。那么接下来咱们看什么呢?这个图关了。接下来呢,我我我来写一个程序啊,然后大家来看这个程序怎么去,怎么去调代码怎么去写好吧。
01:08
测试一下啊,就是这个图咱们画了差不多了是吧,那咱们来这个看一看啊,假如说我这里有个t.Java啊,我我我这个名字我就随便起了,各位啊,随便起。嗯。嗯,是这样,Public class t,然后T里边呢,T这个,呃,在这呢有一个class a啊,然后呢,在这呢有个class b啊,然后在这呢有一个class c。我看大家会不会啊,Class c啊,然后class再来一个class d。多来几个啊。然后接下来呢,就是说我这个T当中有什么呢,有A。明白吗?A当中有什么呀?有B。B当中有什么呢?有C。C当中呢,有什么呀,有D。
02:03
那D这块呢,有一个int I。现在呢,我在这个当中啊,有一个public。啊,然后接下来我是怎么做呢?我说D呀D呀,一个D呀。啊,然后呢。呃,CC,你有一个C。BB一个B啊。AA一个A。TT一个T。也就是说我我把这个这个造出来,这个造出来,这个造出来个造出来,这个造出来都创建出来对象了啊,也是abdcd,然后T都有对象了,那么接下来我干什么呢?我说呀,我说这个c.D呀。
03:02
等于D啊c.D等于D看好了啊C点。C。是他,他是C。是吧,哎,CC点什么呀。D。为什么可以点D啊。因为C的类型什么类型啊,这个类型是不是。啊,这里面是不是递变量啊。c.D等于什么呀?等于这个D。啊,这个D呢,就是这个D啊。啊c.D啊等于D,然后b.CB。点C。等于B。嗯。b.C等于。C啊B在哪啊在这吧,点C是不是这个C的类型是这个吧。
04:00
然后点C啊。捋一下各位啊,这个能不能捋清楚,首先是DCBAT都扭出来。出来之后呢,我C干什么呢,我这个c.D呢,就等于D呗。啊,然后呢,b.C呢。b.C呢就是C。我通过等号给他过来啊。然后a.B等于什么呢?a.BA是谁呀?是他。他是谁啊?A吧a.B吧,等于谁啊?就AB,这里等于等于什么?各位等于B吧。是不是这个,哎,好,那T点。什么呢?A。T吗?点A吗?是不是,哎,等于什么呀。等于A。然后编写代码,通过什么呢?
05:05
T。来访问什么呢?访问D中的I。这个代码怎么写,各位?通过这个。访问这个I。怎么做,我给大家点时间,大家呢,在这个保利卫视上写一下,然后发过来。从这发一下,我看看能不能。整明白。你不是有T吗,现在。点了。点什么?A吧。A。B呗,哎,你你这边怎么怎么写,就我想通过这个T这一块开始访问到谁访问到D中的I。
06:18
好了,咱们来看看啊,同学们说的是t.a.b.c.a哎,有道理啊,咱们看一下啊各位。首先呢,我说呀,通过T来访问是不是,那你现在这个程序里边有没有T呀,有吧,那有T的话,T里面是不是有一个A呀。所以是不是点A呀,你不能这么干啊,不能这样干,这样干会有什么问题各位。这样做会有什么问题?成员变量,实例变量能用类名去访问吗?能用类名去访问吗?不能吧,不能啊,这是个什么变量,各位,这是一个实例变量,是不是成员变量中的什么实例变量啊,必须先干什么呀,创建对象。
07:02
啊,通过引用来访问这个T现在有没有对象。扭完之后是不是这个T就是个引用啊,那么t.a呗。是不是t.a所以这个是错误的,不能这么干啊,得怎么做呀。T。是不是?啊,点什么呀,是不是。点A之后呢,A的类型是什么类型是A吧。你就相当于是说你int类型K呗。那你t.K是什么类型啊?你想想你t.K的类型是不是in它?那如果说你t.a呢,它的类型不就是A吗。那A里边有啥呀,B吧,是不是有B呀。啊,所以点B呗,你点B之后的类型是什么类型啊,是B吧。
08:03
那你B这个类里边有什么呀?有C吧,所以是不是点C呀。你点C之后,你C的类型什么类型C吧,C的C里边是不是有D呀。是不是点D啊。对不对,D里边是不是有I,是不是点A就行了。是不是,哎这样的。这样的。啊。那咱们这个是不是起名起的有点有点有点意思啊,有点意思。嗯。O1得了行吧,O1啊O2大家看好了啊。O3。不是啊。我们变一下名字啊,省得大家这块呢,有点懵啊。T里边A名。A里边有一个。B啊叫 oo2啊,O3O4,然后这是I,我们再来一下啊。
09:04
DD6DCC6CBB6B,然后AA6AT6T,然后接下来是。C点什么。这点哦四吧。C点四。是不是等于低呀?因为这个类型是D。所以是不是把这个D过来。对吧。然后b.o3吧。这不B吗B类型b.o3吗?O3是C啊。所以b.o3啊等于C。b.o3的类型是C嘛,所以这是不是C啊,把C过来啊,附上去啊,然后紧接着A呢。一点什么?O2吧。
10:05
T呢?T这个t.OE呗。t.o吗?等于谁啊?这是类型是A吗?这正好有个A给他拿过来放过来,然后接下来的时候怎么访问啊。应该点什么?一点。O,是不是啊?O1的类型是AA里边有个啥O2对吗?是不是点O2啊。O2的类型是BB里边有个什么,CC是O3是吧?点O3呗。点O3之后呢,是不是就是CC里边是不是有O4啊,O4是不是D呀。点O4 o4是DD,里边是不是有一个I。是不是点I啊,是不是这样啊t.o一点O2点O3点O4点I,那么是不是就相当于通过T。
11:03
找到这个。这个A又找到DB,又找到CC,又找到DB,又找到ii的值是不是等于零啊?所以这个结果是不是零啊,来上级目录啊,Java ct.java Java t走零,好,当然最后结果是不是已经输出零了。对不对,哎,结果输出啊,输出零。好,那有同学老师,我拗拗拗拗拗拗完了,你为什么要写这一步呢?假如说这步不写,后果会是怎样的呢?就这段代码不写,后果会怎样?好好想想。你光把对象扭出来了,你比如说你是T出来了。O1你没有赋值。你没有给t.OE赋值,那么大家想这个位置是不是啊?
12:02
对吧,那如果是none的话,再往下是不是继续往下点就会出问题呢。会不会出问题呢?就是这段代码有没有用。啊,有同学知道是空指针是不是啊,那是学过的,来Java c编译加运行,你看出现单pointer exception。是不是哎,出现空指针异常。来这里不写会出现这个异常啊,这里不写代码会出现这个异常,叫空指针异常啊。那么我说一下啊,这个代码我留个作业,我一会儿给大家讲啊,什么叫控制异常,控制异常是怎么诞生的,怎么产生的,一会儿咱们再讲,现在先不用管它啊,总之啊,我在这里还要布置一个作业,各位啊,把这个内存图画出来。
13:03
把这个内存图啊画出来,一定要按照程序的执行顺序,一步一步画。啊,一步一步画,走到哪就画到哪,走到哪就画到哪啊,你看你到底理解不理解好吧。
我来说两句