00:01
那各位同学我们继续,那下午呢比较容易犯困,大家呢先做一道题热热身。首先,这有一个最简单的ntt person只有两个通道。Idea。名字。然后呢,有一个空仓的构造方法,有一个带名字的,带一个实数类型参数的构造方法。好,那么这道题呢?我们呢,来看看。主要是。传值。那说白了,Java里面呢,哎呀,这种问题呢,也一直是争论的呢,喋喋不休吧,传值还是传引用,就首先绝对严谨学术范,按照thinking Java的英文原版,只有pass by,拜了,只有传值,但是一般我们为了讲课方便,我们都会说嘴,口语上会说传值或者传引用好区分,好吧,咱们呢,呃,不做老学究。这种。斤斤计较,我们为了方便我口语上表达,现在就是传值和传引用。那首先现在让大家干的活,我们来看一下。
01:03
EL基本类型。Person引用类型引用类型,那么要求大家打出20行。24行,28行全部的效果,那么刚才给大家一点点时间,能不能做一下。好,那么这个时候同学们,我们来看一下最终我们的结果。那么三问全对的,举手。OK,好,那么这个时候呢。兄弟们呢,热热身,以后听老师讲好。那么呢,这道题呢,是临时加的哈,不算是那个什么难的题目。首先哈。你得整明白两个通道。你到底打的是哪一个?那么说白了就是注意这些变量和参数在GVM里面的位置加变量的作用域。
02:00
首先,我们先来看第20行。根据idea的语法提示和高亮显示,我们会发现。第20行,我要你打的这个A属于谁的,属于没方法的。那么也就是说,现在根据我们的GVM,我们都明白,对于一个对象而言,一般这样启动的main方法都在站里面啊。那么八种基本类型都会在账里面分配,那么干嘛呢?这个18行它首先在这儿。那么T千9601,他要把这个A级。传递给。19行这个行参里面。可是19还是另外一个方法,我们讲过。在站里面。干嘛?是保存运行的方法。杨哥在讲GVM的时候讲过一句口诀,站管运行,堆管存储。站是管运行的,怎么个运行?就是一个一个方法的堆叠。那么这个时候,同学们应该。
03:02
整的明白,现在在我们的账里面。根据。先进后出的原则,我们的第一个子弹是不是就是我们的这个main方法?同学们,第一步OK吧,那么第二个同学们。我们的第二颗子弹。干嘛是我们加载进来的是吗?千几百六一这个方法,那么这个时候同学们。什么意思呢?就有点类似于哥们儿,你这个may,你要想运行到第29行完成,是不是要等这个第19行运行完成?那有点类似于什么概念?第一颗子弹。在弹夹的占比妹,这个子弹要出去,是不是我脑袋上的子弹要全部被设计出去才OK啊?沿下直线may里面,它这有个A等于22,然后听好。根据方法的作用是我这个A级,你看高亮显示以后,它在哪哪个括号里面,它是在main方法的括号里面,这个第18行,这个A级是属于may方法的。
04:11
我们现在要零打的是哪个,要零打的是第20行的这个A级,那这个A级是谁?高量显示关联的提示是不是还是没有方法的,那么言下之线我T氢八六机对于int类型的基本类型。我传的只是一个复印件。言下之线。我把第18行。复印了一份,然后传给了欠七百六一,他在这儿的时候还是20,但是到第八行的时候,欠七百六一将这个值改为了30,啊,有点类似于现在我给你传过去是20。然后你呢,又把它改成30了,OK,那这个千760就带着这个30啊出去了,现在我们回到麦。我让你打的是哪个啊?我让你打的是妹的这个,那说白了,卖的这个我只是传复印了一份给他复印件。
05:05
我原件根本没到,我不招谁,我不惹谁。所以说现在。我们得到第一个A级还是20。那么好,这是从方法的作用域和GVM的分布来讲,这个我就快快的讲了,因为这个是属于什么下午上课困给大家的热身题目。再说白点,好比现在杨哥新接手你们班,现在。班长。给了我一份名单,这个就是班长。手上的那份原件听懂了吗?传给杨哥,杨哥是不是手上有一份班长原件的复印件?班长手上的这份名单,18行这个在班长手上。杨哥的这个在第19行复印过来以后,我在这儿。然后呢,刚好今天下午第二排这个同学没来。那么杨哥就会把我手上的第二排这个同学的名字啊找出来,问班长说这个同学怎么着,还在不在?班长跟我讲。
06:06
杨哥,这位同学要回学校去做答辩,他没有办法听完课了,他已经走了,他不会来听课了,那周洋现在是不是会把这个名单?我手上这份复印件给涂抹掉,给划掉,那么请问周洋手上这份。变动了,但是班长手上这份原件是不是根本就没有变动过呀,最终我让你打印的是什么,班长手上这份的没方法作用于里面的,所以说干嘛可以这么。最简单的来理解基本类型几乎就是传的是一个什么复印件,OK,好,那么第二步。扭person,扭person,那不用减,这块有个ABC,那么这个12。刘优老师、李玉婷老师、柴玲燕老师。这些奖第一个月。上硅谷的Java是六个月,第一个月是要学整整一个月,接近Java的基础。
07:00
那么像这种题目啊,100%的讲过多次啊,那么我们可以看。老规矩,这个还是刚才那句话,先看方法的作用域,你看语法高亮显示以后打哪个person,是不是打没方法里面的,比方说这个person你看。它这亮了,跟下面这三个没跟着联动吧,所以说根据方法的作用是一个是may的,一个是VALUE2的,这是两回事,一定要分清楚,那么这个时候同学们请看。破损指向new person,那这个时候我们的第二种情况。你们干嘛呢?啊,先来一个吧,干脆。那么现在。我们在这儿。有一个。引用P指向我们这堆里面有一个什么new person,叫ABC。好,同学们,这就是我们第22行。那么T塔欠几百点二,那么我们口语上讲,对于person引用类型,这个是不是叫传引用?再说白点说,传。
08:03
内存地址啊。给Y62,在这个到这的时候出现了Y62,这有个行差叫P那么好。这哥们儿过来。千几百了。二的。他也指向。同样的地址也指向它,现在相当于是不是两个引用指向了同一个内存地址。好。那么这时候干什么呢?对于这个地址里边,请看十十一行它们两个高亮显示了吧,所以说方法的作用就一定要搞清楚啊,是谁指谁。Person person,叉叉叉,那么兄弟们。这个地址。换了值。换成了叉叉叉。那么走人。相当于11行将这个内存地址设置为了叉叉叉这个方法结束。从这回退到23行,然后接下来请看。
09:00
他让你打的这个person谁呀?没方法里面的,没方法里面的是谁呀,是不是就上面这个空心键堂。那么这个空心箭头指示这个地址现在的值是多少?叉叉叉,所以说同学们老眼这个值是叉叉叉,第二问能跟上。可以这么讲,这道题。你最不应该错的。就是第二问。如果第二遍错了,你对这个Java的指针和引用完全是扯淡的。当然,虽然说Java没有指针,但的士而言,你要是学过C语言,像我们这样做计算机系科班出身的,就这么一个地址,就是个指债。那说白了,现在。同学们请看。二排一列,这个同学今天没来,但是地址还是这个地址。昨天是不是有李春华这个同学坐在这儿,但是今天是不是就没有这个同学了,地址还是这个地址,但是他的值是不是会变动啊,那么现在干嘛呢?我们要明白。这个person是谁?没犯法的person?这个person是谁?是千几百了二的person?
10:05
两回事,但说白了请看指针那一个是空心箭头,一个是实心箭头,是不是两个方法不同的指针,但是他们指向了同一个地址,两个针都可以改。那么最终暴露出来反退这个箭头指的这个地址,现在值是什么?现在值是叉叉叉,说白了什么personon的值啊,是不是被改过了?好,那么接下来。我们再来看。第三个string老规矩,打哪个打?打的是main方法里面这个string啊,你看string string ABC。那么这个时候呢?大部分同学他考试考第三问这个你做错了,那么恭喜你干嘛?晚一的题目可能你挂了。这个就是大厂的缘起。不丢人,这块有好多人错,但是这两个你真真不能错。你不能对吧,这种题目说白了,尤其是像这个题目肯定讲过嘛,指针指向同一个,其中有一个引用改了另外一个引用的是不是要随着跟着变道,那么这事什么本来呢是一道送分题,结果呢,对你而言变成一道送命题,这就亏大发了。
11:08
那么接下来我们可以看。那为什么这个就会变,为什么这个就不变呢?那么这个是有什么死string的特殊性,我们讲过死中有两种,一种是这样直接自变量的,一种是不是new的,那么像这种东东它在哪啊?是不是在所谓的字符串常量池里面?好,兄弟们跟着我来。这儿有个池子。现在对于死猪而言,先去池子里面检查有没有ABC,没有,我首先是不是要新建啊?那么好,这个时候同学们请看老规矩,这儿有一个空心箭头。这个就是may里面的那个箭头,这一步同学们能跟上。初始值。现在这货多少ABC同学们,这个就是第26行,同学们,没问题吧?好,那么接下来千几百六三把这个传过去。
12:01
好,那么在这儿。的时候。我们这个实心箭头一样,跟你指向着这个同一个。地址没问题。但是现在那坑爹的就是这种情况。由于死顺特殊。在这儿的时候,第13行的时候,现在我们的指向是这么一个状态,但是问题是到第14行。要等于叉叉叉。String的特性,他会去找那这个池子里面有没有叉叉叉,没有没有怎么办?没有要新建,有了我复用,所以说这个时候实心箭头将会从原来的ABC指向指向一个新的地址去自己。干嘛?各自分家独立过了,你指你的ABC,我指我的叉叉叉。这个时候。相当于我们的第14行变成了这么一个德行,那么OK,指完以后没人用,那就是没人用了方法。
13:09
结束回声。结着结果返回到第27行,老规矩,请看我让你打出第28行,这个str高亮显示以后是谁的是妹的,妹的是谁,是不是空心这个,那么到最后我是不是不招谁不惹谁,好好的指向ABC从来没动过,所以说这个时候我们这个值啊,就是ABC。一个是20,一个是叉叉叉,一个是ABC。做错的同学必须搞懂,这个是Java基于M方法作用于内存指针地址指向的基本功,做对的同学要问问自己,我是蒙对的,还是真的是像这样一步步内存分析得整明白的那么好。大家一定要掌握这道题目,由于这个是下午的热身题目,说白了也不归我讲,我只不过是看同学们太困了,给大家热热脑子,我讲的重点在后面,好吧,那么这道题杨哥呢,就不再废话,给大家介绍到这儿。
我来说两句