00:00
嗯,那我们呢,讲完这个参数的传递机制以后啊,看一下这个客户的问题,呃,这客户的问题呢,有这样的几道题哈,首先来看第一道说呢,嗯,例题三,呃,这个题目的话呢,咱们真实开发中去写代码的话呢,肯定不会写成这样,就里边呢来回的这样改啊掉啊这样的是吧?呃,但是这道题呢,就是想让大家看一下这个一方面内存分配上哪些结构应该在占,哪些结构应该在堆,诶同时的话呢,我们这里边涉及到很多的变量呢,来回的这样去赋值,诶你得清楚这里边它是怎么赋的啊,也就相当于呢,要清楚这个参数传递的一个机制,哎大家呢,就把握我们讲的这个规律,哎最后呢,落脚点就是这个结论,诶把这个结论呢大家掌握啊,咱们呢,就把这个结论呢,就称作叫直传力机制了。啊,那如果问到说Java中的参数的这个行参的这个传递机制是什么呢?呃,你就说叫直传递机制,呃,叫直传递机制,呃,有的时候呢,呃,别人会说,诶是不是叫引用传递,哎,这要注意不是引用传递,就是咱们呢,这包括基本数据类型和引用数据类型啊基本数据类型呢,它传的就是真实的这个数据了啊,谈不上这个叫引用了啊呃,然后引用类型呢,它传的就是这个地址值啊,大家就记住这个结论就可以了啊成那我们来看一下这道问题啊,这道题的话呢,其实还是让大家画这个内存的结构图的,呃,这个正确的我已经画到这儿了,那显得稍微有点乱啊呃,那咱们这块呢,再带着大家再画一下,所以重点呢,主要是大家来画的这个过程,而不是说为了得到这样的一个结果啊,结果的话呢,你这个没有多大参考意义了啊,这个回头咱们题目一遍,那就不是这道题了啊成呃,那咱们呢,就来画一下这块,我把这个代码呢给它粘出来,呃,放到一个。
01:48
这个PPT当中。诶CTRLV一下啊行行,我这儿呢,就把这个代码呢,是放到这儿,这个图呢,咱们在这块位置再去画啊,诶我把这个呢再清一下。
02:07
这个稍微有点长,这个这么着。好诶,咱们来看一下啊,嗯,我们去画这个内存结构的时候呢,大家直接就上来找这个酶方法,呃,这个酶方法呢,是在这个位置啊,所以从这个酶方法进来,我们看下这个结构该怎么去画,首先一上来的话呢,我们去创建了当前啊这个测试类的一个对象,哎,这个呢,其实不是咱们现在考察的重点问题哈,啊,也可以给他这个声明一下啊,也没有问题。啊,大家看一下这个画的跟你自己画的,跟我这个画的呢,是不是整个这个是一样的啊嗯,这里呢提到在站空间中,我们生明这个叫test的这样的变量,哎,这就放到这儿了,哎,那右边呢拗了个对象,我这呢就给它拗一个对象啊这个new对象的过程,实际上呢,它就把我们这个类呢,就加载到这个方法区了啊那个过程呢,咱们先暂时不去关注啊,咱们主要呢先看这个栈和堆,然后在这个堆当中呢,就会应该存在我们当前这个类的这个属性啊,那很遗憾这个类呢没有属性。
03:15
啊,那这呢就不用去管了啊,包括它也有个地址值,把这地址呢赋给我们这个test啊,咱们这里呢,因为重点说的不是它了啊,所以我这呢就简单的把它呢,把它俩来处理一下,就这样就完事了,那么接下来呢,我们重点的看它是调方法哈,这个方法呢,就是在我们创建对象的时候呢,把这个方法加载到这个方法区里的,所以我们可以直接去进行调用了啊成那我们调这个F的方法,那就奔到这块了啊,这个呢整体字体稍微大一点啊。哎,就奔到这儿来了。这个往这边移下行,在这里边的话呢,我们首先呢,定义了一个变量I啊,它这个值是五,那这块呢,我们就这个在这声明一下,因为你这方法里边定义的,所以它就是个局部变量了,那这个I呢,是一个五。
04:07
然后接下来我们呢,定义了一个Y6型的变量V是new了一个VALUE6啊,仍然是占空间中定义的啊,这就我们这个V啊,拗了个value,对空间中你去扭一下。哎,这样我们就扭了一个结构啊,那扭完以后我们看一下这个Y6呢,在这儿定义的。对,我们这里有个属性I是15,所以自然而然的,我们把这个属性呢,就生命在我们对空间这个Y6当中。15啊,当然了,一开始也是先是个零哈,先是个零,然后呢,拿这个15显示的值给它覆盖掉的啊,你要详细的把这个过程描绘出来呢,就先是一个默认值,然后接下来我们给它干掉。改成一个,呃,显示负值15是这样一个过程,然后呢,这块有个地址值,这个地址呢,因为这里边就涉及到对它这个传递了,所以我这明确的把它这个值呢附一个。
05:03
啊0X5566,将这个地址呢,付给我们站空间中的这个V0X5566。好,那么我们这个V就通过地址值指向了对空间中的这个结构啊,这就是我们这一行代码搞定的。哎,这样代码结束以后,下面呢,我通过这个V呢,来调这个I改成25,通过V调我们这个I改成25。把他俩干掉。那改成25。看这样子,把这个换的稍微大一点啊啊改成25的话呢,这一行代码就搞定了,诶接下来我们second的方法呢,被调用了,调用的时候呢,将我们上面的这个十参V啊和我们这个变量I5的这个值哈付过去。啊,这两个呢,是作为这个十参出现的,然后付给我们下边的这个对应的形参,这个形态呢,恰好也叫V和I。
06:04
但要注意这时候呢,是second方法里的哈,嗯,这个为了防止这个整混,我在那整一个大括号哈,咱们呢,是在first里边定义的这两个参数。哎,这是first里的啊,然后下面呢,是这个second方法里的。咱咱们给他画的稍微长一点啊,这样,嗯,将我们这个V付给了second方法的行参V。那我们first方法里这个V呢,是5566,所以自然而然的,呃,付过来以后呢,也是5566。啊,这是这个同时的话呢,我们这个行参I是拿你first里边这个I付过来的。呃,在这个位置也是有一个I,哎,这个呢是嗯,就是拿你这个值付过来的啊,所以这也是五行,这呢是咱们调这个方法啊,现在呢就到这儿了,到这儿以后呢,接着往下走。接着往下走,我们呢,一上来呢,这个II前面没有类型,说明你这是已经存在这个变量,那很显很显然呢,是我们这个行参I了。
07:08
将我们这个形态呢,我们改成零了。上来呢,就把他干掉了。呃,这个呢就写成一个零,接着通过V来调这个I,这个V呢,就是我们这个行3V就是这个V,这个V呢,刚才我们有了地址值以后呢,它也指向的是这个结构,然后通过它呢来调我们这个I,那就调到这个I了,把这个I呢改成20。哎,把这个干掉。改成20,所以这道问题呢,其实只要你把握这个最基本的原则,他愿意怎么改就怎么改啊,就不会错了,改成20以后,嗯,下边我呢,又拗了一个value,只要是又new的结构,那你就在对空间当中,你去重新的给它开辟一个。哎,重新开辟一个啊啊,用了个Y6,然后呢,又声明成一个新的变量,仍然是在S当中定义的,那就是新给它提供一个VL。
08:10
诶,那么这个对空间中呢,我们同样的啊,哎,还是new的,你这个Y6啊,也是先定一个变量I在对空间当中,先是零,然后显示的15覆盖掉,哎,类似于我们刚才说的这个过程。行,我把这个呢结构先复制一下拿过来啊,这个15。诶诶十五十五就别给他整整这个杠了。哎,这样啊,哎这呢,就是我们新旧的这样的一个value,它呢也有一个地址值。哎,这是我们这个首地值值啊,比如说叫8899,将我们这个8899付给咱们这个的叫VL啊0X。
09:04
8899。哎,付给它,那么通过地址值,哎,我们呢就直过来,诶就这样子直过来了,那这呢是咱们说的这一行代码。哎,这一行代码搞定的事情啊,它呢,完成以后,再接下来将我们的VL,它的值呢,赋给V盈利性的变量,哎,负的不是nor,就是一个地址,哎,所以我们这个VR呢,就是把这个啊8899呢附给这个V,这个V就是这个V,也就是这个V。哎,所以这个地址呢,覆盖掉它,那此时呢,这个显得就稍微有点乱了。那此时的话呢,这个地址修改以后呢,这个指针呢,其实就不存在了啊,我打一个小叉5566呢,这个就不在了。这个给他得干掉,改成叉,改成这个8899。这个长得有点挤啊。
10:02
嗯,把它变得稍微小一点啊,这样这个呢,往上拽一拽。嗯,这样啊,哎,它呢,改成8899,改成以后的话呢,我们此时的这个second里的这个V呢,它也就也指向这个结构了,对,这就是这个,嗯,也就是我们这一行代码搞定的事情。好,这个代码搞定以后,接下来有个c out,说输出一下v.I这个V就是你这个V,那就是这个V v.I。15对吧,哎,这就出来了,然后下一个说I,这个I就是你这个I,也是我们这个I。第二。哎,这就出来了啊,那就是十五零,这就首先输出的这个结果,输出完以后呢,我们这个second方法呢,就结束了,Second方案一结束,在second当中,我们定义的还有个蓝色的比啊这个变量,这个变量和这个变量就都弹出站,他们两个,他们三个一出站以后,那么这个变量代表的这个指针就没有了,这个变量代表这个指针也就没有了啊那么在堆空间当中,它这个结构呢,就认为是一个垃圾了,哎,就被回收掉了。
11:26
那就没有了啊,然后呢,我们在first里边这个结构是不是还还有呢,是吧,还有呢,那就相当于你回来以后呢,这个second执行完以后啊,这个相当于first里边这部分呢,就结束了啊接着往后走,那接着呢去输入v.a。这个V呢,它一定不是你second的V了哈,而是我们在first里边定义的这个V,也就是我们的这个V,这个V呢,现在还存在啊,因为first方法还没执行完呢,那这个V我们去输出它的I,通过V调这个I,这不就是20,所以这块呢,这20呢就输出出来了,哎,行,20输入完以后呢,First当中定义的这个这个变量和这个变量就也都弹出站了。
12:09
它一弹出这个指针就没有了,然后接下来呢,这个结构就意味着没有,诶对象呢,去这个变量指向了,所以它呢就也被回收了,呃,First执行完以后呢,整个may方法呢,相当也就执行完了,May方法执行完,在may当中定义的这个test呢,也就出战了,你看这里边我们提到都是呃后进的先出去的,嗯,这个T呢消失以后呢,这个指针就没有了,这个呢也就被销毁了。哎,这就是整个这样的一个过程啊,那这道题目呢,正确答案呢,就是十五零,还有这个20,哎,这就是这个结果啊,哎,具体画图的话呢,就是这样个图,看着稍微乱一点啊,主要呢,大家还是关注于这个过程啊,你去理解一下,来回这样改过来改过去复无外乎呢,就是我们说的这个结论,只要把握住这个结论,再把握住我们讲的说什么结构在战,什么结构在堆,这个你都记住它,这个怎么画他也错不了。
13:06
啊,就是这样个题目啊,行,这个没有画好的呢,大家下来呢,你自己再画一画啊,那这个题目呢,是一个,嗯,从这个内存解析这个练习层面呢,是一个挺好的题,但是咱们要写代码的时候,这样这样来回这样操作,其实还挺乱的啊嗯,一般呢,不会是这种来回的这样改啊修改啊这种操作的啊,就是为了纯粹的让大家去练一下这个变量赋值到底赋的是什么啊。
我来说两句