00:00
下面呢,我们来继续往下看一下一个开对象创建的流程。那么我们以这个为例,比如说这有个person对吧,这个person里面呢,有两个属性,对,然后呢,这里面有个辅助构造器,辅助构造器,这个辅助构造器里面呢,按照我们原先写的这个呃,规则也是正确的编写的,那假如现在呢,我在这溜了一个对象小倩,给了他20岁,那这个时候显然调用的是我们的辅助构造器,对吧。那么这个流程我们来看一下,就是在SC里面一个对象创建的流程,呃,是什么样子的呢?它这个流程是这样子的啊第一步,第一步首先呢,它要进行这个类信息的装载,就是加载我们这个类信息,这个跟Java是一样的,第一步是加载。啊,加载类信息。加载类的信息,那么加载这个类的信息说的再直接一点,就是加载它的什么呢?加载它的属性信息和它的方法信息,方法信息。
01:11
这个会把它加载到方法区,以前老师在讲这个Java基础的时候呢,应该提过这个就是他会装载到它的这个方法区,这个加载完了过后,我用黑色啊,这个装载以后呢。加载以后,它就开始先是对内信息的加载。加载那个信息过后呢,下一步就是在内存里边开辟我们的这个数据空间。在内存中,内存中准确的讲呢,这个是在堆中,堆中开辟啊开辟开辟,开辟我们的内那个空间啊,开辟这个空间,把空间给你开好,那么空间开多大呢?这个要取决于你的属性是多大,所以说你看为什么有些这个有些人他们在定这个属性的时候也是很讲究的。
02:07
对吧,我能够用小数据,我就不用大数据,比如说你这个int能够,比如说我这个年龄用int,其实就是不对的,因为你一个人的年龄哪有那么大嘛啊,正常一个人的年龄也就200岁,对吧,你能活200岁不得了了,所以其实用个shot就完完全全的够了,虽然感觉好像就一点改变,但是你要想假设你们将来这个大数据,你们的对象很多。假如你有1000万个对象,我有一个属性,我节省了两个字节,我1000万个对象,我节省2000万个字节呀。哎,这就是高手,他就是其实这么一点点东西改变不多,但是你的内存一下就急省了,你像那个你看有些有些人说老师我的内存不够用,那人家高手你看,诶这个内存不够用,人家代码一点逻辑都不你改。一点逻辑都不改,只把只把你的数据类型按照严格的规定给你优化,立马就翻倍了,就这么简单知道吧,就这么简单,你以为有多难呢?因为你你你你一个你加载的时候,假如都在内存里面,因为你们将来Spark它全部是内存级别的。
03:09
那内存级别代表什么?全部都要加载内存。那你能省一点点,你不就优化了吗?对吧,所以说有时候不是想的那么难啊,你们以后做做这个大数据,老师都会提到这些细节,其实就是细节见功夫,就好像同学们。去到一个饭馆吃饭,两个饭馆本质都没都没差别,都是吃牛肉对吧,牛肉面嘛,都是牛肉,但人家做出来就好吃,为什么呢?细节考究了一下对吧?好,就是我这个意思,点到为止啊,就开辟空间,这个是取决于你的属性啊,有有有多大,那么开辟空间以后呢,下一步步就根据你的这个主构造器来对我们这个属性进行初始化,就是使用二使用这个主构造器,主构造器对属性进行初始化。
04:00
初始化,那你属性你这写的是什么就什么,你比如说针对我们这个案例,那你这个地方上来过age呢,就变成了90对吧,你的A值呢,这个我就不画图了啊同学们,你这个A就等于90,你这个name呢,默认它就是一个空。啊,紧接着呢,第三第四一步,它就调用我们的辅助构造器进行进一步的初始化,因为有有可能是主高机调完了过后,我还要初始化,所以说使用。使用这个什么呢?使用我们的这一个,就说辅助构造器,辅助辅助构造器,呃,对属性再次初始化,对属性进行初始化,进行初始化。嗯,这一点呢,其实跟Java是有一点区别的,因为Java呢,他在这个进行勾初始化的时候,它它其实是完全可以没有什么,他没有组合副辅助这个概念了。没有你你你你的构造,其地位都是一样的。
05:01
对不对,所以说这个呢,大家要要清晰的知道啊,当然我这问题说的应该在,如果准确一点,应该是这样子啊,他在调组构造机器之前,还要对它的副类,副类的这个构造器进行初始化,那副类还有副类就一直往上推,所以我应该再加一个先是使用这个,呃,副类的副类的构造器啊,这个构造器顺序也是一样,如果你副类里面。你副类里面呢,它也是调用父类的阻隔斗器。正确啊,因为你你将来这地方到底是怎么怎么做的,要根据业务情况来说,他要用负类的构造器,当然这边也有组合和辅助啊,辅助进行初始化。进行初始。进行这个初始化,那这个初始化呢,我们后面会讲会讲什么呢?你这个负类里面的属性。是怎么初始化的,你子类里面的属性就是怎么初始的,后面我们会还要还要详细讲介绍好呃,负类做完了之后,做这个本类的主构造器,然后本类的辅助构造器,最后第五一步啊,当然这个地方。
06:07
呃,根据我们这辅助构造器,那相当于把这个N和A给他了,对吧?好,那你这传的是小倩那20这个零,这个这个年龄呢就变了。诶,你第一次这个,那么名字就变成了20。那么你这个名字呢,就呃,AA变成20,你的名字就变成小倩了。啊,小倩。然后呢,第六一步呢,不要忘了一件事情,你最终把这边做完了以后,你还得因为我们父子运算是先运算我们它是从右向左嘛,那这个时候呢,他把这个对象的地址付给我们这个P这个引用这个就结束了啊将什么呢?将创建。就将这个内存的这个地址啊,将这个开辟的地址创建的开辟的开辟的这个对象的这个地址,内存地址啊地址付给付给谁呢?付给P这个引用,这个引用好,这个引用写错了啊,大家这个地方有点看不清楚,我改一下引用。
07:10
好,我把这个地方加粗,大家应该就看的清楚了。啊,这这这样大家应该看清楚了,往上面挪一下吧。好,往上面挪一下,好,就是这样一个流程,如果有有面试官问到这个呢,你一定要强调这有一个主构造器和副主构造器的一个逻辑,同时还要提到副构造器上面也是按照主构造器副构造器的一个一一个构建构成啊不要不要忘了,这这个地方跟Java是有一点小区别的,不然的话你达成的就不是很准确的。好了,同学们,那对象创建的流程老师就先分析到这里,你也不用去过多的研究哈,就掌握到这个程度就可以了,没有必要。往死了钻。好,这是对象创建的一个流程,我们这几个SC对象。干对象的创建流程,来吧,给各位同学放到这里,这是我们的标题二对吧,标题二在这里,好,然后呢,我根据一个小案例,就是刚才写这个案例来分析了一下这个流程,给同学们板述一下。
08:13
哎,这是我们的一个案例标题三,然后呢,这边我们做了一个流程的分析啊,流程分析,流程分析呢,我们是这样写的,对吧,第一第一第一步啊,加载我们的这个类的信息。这个类型是加载到方法区的,然后这个内存呢,是在堆里面开放的,呃,创建的,然后呢,先对副类进行这个初始化,再对我们主呃本类初始化,最后将地址赋给P这个引用好,这是对象创建的流程。
我来说两句