00:00
再看一下其他内容,就是如何创建对象,刚才我们讲了创建对象其实跟Java基本上是一样的。那么创建对象的时候,这个类型也可以使用类型推导啊,这个我就不多说了,VVR区别。啊,VRL和VR区别呢,我再呃再再啰嗦两句啊,就是如果你这个对象将来呢,只是。就是说这个对象本身你不希望发生变化,或者就不会变化。哦,我说的变化不是指它的属性变化啊,是这个对象本身变不变化。如果它不变化,你就用VL,如果将来这个对象你就有可能。去让它指向一个新的地址空间。那你就一定要用。是吧?哎,这点请大家一定要注意,那说明如果我们不希望。如果我们不希望改变对象的引用及内存地址,那么就应该声明成Val,因为这样呢,它没有现成安全性的问题,性能会比较高。
01:04
否则你就写成va VAR,那么SKY设计者推荐我们使用V。一般来说,在程序中只要是改变对象属性值而不是改变对象引用,那么就直接写成它。好说完了第二点开了声明对象变量时,可以根据创建对象类型自动推断所以类型的这一部分声明。可以不要。但是有一个特殊情况。但是有个特殊情况什么呢?就是我这写的这句话,但当类型和后面六的对象类型有继承关系时,及多态你就必须写了,那你说的是你这句话我听不懂哎。这个意思啊,如果你不去,你把这个拿掉了。那么他。它这个多肽效果就出不来了,为什么呢?因为你你假如这是个子类,你这个子类,你要把一个子类,你你本意是想把一个子类赋给赋给一个呃父类,但是你又不去指明这个父类的类型,那么它永远都是子类。
02:10
好,那我举个例子,就是这这一点呢,就是我的蓝色标明的,大家要注意什么情况下你必须写类型呢?就是你希望把一个子类。就是你你把一个子类的引用要交给一个父类,这个时候你这个类型,父类的类型就必须写,你不写它,它类型推断出来,它就是子类。那么我举个例子啊,来,同学们,我把这个案例给大家聊两句。这个案例给大家聊两句,来整一个吧。好,那么现在呢,我们说一下。这个创建对象啊,就是create,这个名字都不好取啊,叫叫做这个create object一个案例来吧,同学们。来走一个,比如说现在呢,我有这么一个类叫什么呢,叫employer。呃,一个叫person吧,叫person。
03:02
好,我就简单写这么一个玩意儿啊,然后呢,我再写一个,这个我叫employee,是一个雇员,雇员呢,我继承了,我继承了person,那大家肯定能够,呃看出来他们之间有个继承关系,就是他是他的子类,好的。那现在呢,我们来创建一个employee。等于六一个employee。好,同学们,嗯,这个大家可以猜测出来,这个类型呢,就是。它的类型就是employee,这个没得说,你看啊,我给大家说一下。Employee,你看哦,真的是他。那因因为你这里用的是类型推导吗。所以说这个时候呢。它就是employee,但是如果同学们将来有一个需求,我什么需求呢?你就是想把这个子类交给一个父类的引用,那这个时候就必须指明这个类型了啊,如果我们希望将一个子类的对象啊交给。
04:09
交给父类的一个,父类的一个引用,这时这时就需要,这时哎,这时就需要干什么呢?写上类型。啊,注意啊,同学们以前是学过Java的,我这块应该大家能理解啊,应该大家能理解,那我再写一个。EMPLOYEE2轴。Person。你看这个呢,我是可以给他的。Person。等于六一个employee,好格式化,那这个时候呢,同学们可以看到啊,我把一个子类的对象交给了一个负。啊,其实这个样,EMPLOY12呢,指向了这个子类的一个,呃,一个地址或者是一个一个引用对不对,那这个时候呢,我们来输出一下EMPLOY12,同学们看这是有区别的,所这个就是变person了。
05:05
所以说如果将来我们有这种这种需求,那么你这个类型就无法省略掉啊,无法省略就不能用类型推导了。好,这是老师讲的,呃,这个创建对象的需要注意的一个一个地方吧,好,同学们我们来看呃,如何访问属性,这个就不说了,简单。好,最后一点把它讲完。最后呢,我们讲一下呃,在scale中内核对象的一个内存分配机制,把这个讲了,我们就今天内容就结束哈,那么内核对象的内存分配机制,它跟Java有区别吗?告诉大家没有区别,是一样的,只是我把这个再给大家整理一下啊,同学们看这段代码。我们来看看SC中内存对象的内存分配的一个机制,比如说这有一段代码。一个person批。P里面有个名字,给了一个Jack,给了一个年龄30。然后我把P。
06:04
交给了P2。也就是说我把P1这个引用给了这个P2,那么这个时候在开里面内存布局是怎么样子的呢?好,我这里就不啰嗦了,直接把这个图拿过来给大家看一下就OK了,好,我就不啰嗦了,直接打开看一下。同学们可以看到它的内存布局呢,呃,跟我们家法几乎一样啊,几乎一样,或者说就是一样,为什么说呢?因为你底层都是基于JVM的,那不能说是,哎,你搞一套JVM,我搞一套JM是吧,底层呢。一就是就是一样的,那么同学们看到,当我把P1给掉P的时候呢,它的逻辑是这样子的,原先有一个P1,它呢,有这里面存了一个地址,这个地址呢指向了一个堆,这个堆呢就这里面就我们一个person的实例,这里面有Jack和十,你看这你给了一个Jack,呃,这这什么三啊,这是30啊,我这写错了,这这个大家知道就行了啊,这个你把它改一下就行了,这是十。
07:10
好给他,当我们执行了这样一句话过后,我们把P1交给P2,过后呢,在我们的站里面呢,有个P2,他把这个地址拿到这边来,他也指向了这个空间,所以说你看这个机制,这个机制跟我们Java。完全一样,那如果这样完全一样的话,同学们心里面就有个底了,那么你们以前Java怎么去用的,怎么去引引用啊,怎么去这个这个这个这个去讲它生命周期啊,就大同小异啊,就一样,那么现在呢,我们来做一个实验看看到底,呃,最后呢,我们还是要证明一下。毕竟SKY是个新的语言嘛,对吧,所以还是简单的证明一下,是不是老师分析的到底对不对呢?那么我们来简单的证明一下,来再写一个小小的案例。
08:01
来吧,我们写一个案例,那么我们来证明一下这个对象的一个分配。Memory memory的一个一个情况啊。好的,那现在呢,我们写到这里来,我们线上两个啊,我们接线class class person啊person呢,因为我在这个包里面已经有一个person了,好像在这用到一个person,所以说我就呃在这里呢,我就换一个PERSON2。好,同样我写一个名字和年龄啊,来吧,默认必须给值,再给他一个年龄对不对,好,默认给他一个零吧,或者用这个方式。啊,这个方式,注意这个地方一定要写这个东西了啊,大家看,如果你用这个默认值同学们。刚才有个细节还忘了说了,如果你用下划线给默认值,前面必须写类型。为什么呢?因为大家都知道这个默认值,它是根据不同的类型付给它不同的值,如果你不给类型,我不知道你是什么类型,就无法给值,到底我给你个字符串呢,还是给给零了,我没办法推了,你明白这意思吧,就说如果如果是以下划线的方式给默认值,下划线的方式这个。
09:15
是一四。以或者是用下划线的方式方式给默认值,则,则必须必须这个属性属性。必须指定类型,那为什么说必须指定类型呢?因为你不指定,那到底我我把你当一个整数呢,还是当一个字符串呢,还是当一个4G呢,我没法判断呢。所以我就没法复制,所以这个就要报错,好同学们注意这个细节走,那现在呢,我们把这个就直接指定是个int。好,同学们,现在呢,我们来写一个小小的代码,走一个,我现在新创建一个P6,一个person,好,来吧V,呃,给他一个值,内蒙,我们就按刚才的那个思路给。
10:07
啊,P点啊,这个name是。完蛋,应该是二,我是说怎么点不出来啊,好,给他按照我们刚才这个示意图给他一个Jack。啊,再给的一个年龄等于十啊J再给它赋一个值H h.H等于多少呢?等于十,好了,紧接着我又有了一个变量P2等于P1,好,当这句话执行以后呢,大家在脑海里面应该反映出一个现象,就是这个地方。的关系形成的。关系,那现在呢,我们来证明一下这两个对象是不是同一个,很简单,我用P1就是把它这个等于。它是否相等?好,我们看这地方应该返回一个处。
11:01
返回一个组织形象。哎,代码有毛病,有毛病是哪里错了呢。PERSON1已经定义了,他说。我在哪个地方又定一个person呢?我没有别的地方定义啊。诶哪个他的意思就是说你已经哦在这这定定一个person,这还定一个person是吧,所以说我先暂时的将呃这个注销一个吧,咱们把这个注销一个啊注销一个,呃。那这样子先把这段代码注销。啊,因为我有两个,这个就没法跑好再来。好,我们再来执行一下,让一下好代码呢,这次应该就没毛病了。好,可以看到的确是等于醋,那么我们再来做一个更好的证明,我用P去改变这个名字,我把这个名字改成汤姆,好,OK,当我用P去呃改变这个名字的话,大家大家可以想象到这个地方。
12:08
就是同学们看到他用PE去访问内容,把这个阶呢改成鸟汤姆。汤姆好,同学们,那么现在呢,我用P2再去访问,名字肯定也是汤姆了,好,这个我们证明一下就就过去了啊,所以说我在这输出一下。就是p2.m呢,也应该等于汤姆,没问题。点好执行一下。我们可以看到这应该输出是是汤姆就对了,果然是汤姆,好证明就这样子的,就说明我们确确实实的呃来证明了,呃开了的这这个对象的布局呢,他跟我们Java是一样的,就是打破这个这个神秘感,大家心里面就有底气了,好同学们,我把这个这就说完了啊,我们把这个板书一下啊,我们板书一下从哪里开始板书呢,就从这。
13:03
啊,就是如何创建对象,这开始板书。好的同学们,我们来把它简单的写写,诶怎么创建对象对吧,如何创建对象三级标题三,然后呢,基本的一个语法是这样子的,说明是这样的,一共呢,说明了这么几点,第一点。对吧,诶第二点开在声明对象的时候,他可以使用这个类型对段。那么这边这个代码呢,我也给同学们粘过来啊,代码案例的代码案例。案例的代码,好的同学们,代码我给大家整理到这里来,这个呢是我们创建对象时候写的代码,就应该是这一句。啊,就应该是这一点。好。好把这个呢打开好给它放放过来。
14:03
好,OK。好,就是这个地方,就是有一个细节的问题,就是当要跟六使用多肽的时候,我们就需要把这个类型写上,对吧?诶没毛病,好,这是这一节,然后呢,我们又继续讲了访问属性,这个不说了,最后呢讲了一个内,就是内核对象的内存分配机制。这个呢,我们画了一个图。好,这个图呢,跟我们以前Java的其实是一样的。那么我们针对哪一个画的图呢?我们针对这个案例,哎,我们看一下这个案例啊,刚才我们这有一个小小的案例,就它就它这个案例对应的示意图呢,我们拿过来。好,这有一个先先写了,先好先写了。写了一段代码,测试代码。测试代码,这个测试代码呢,啊,在这里拿过来。
15:02
诶,这是我们写的测试测试代码。那么这个菜式代码对应的这个分析图啊,上面。啊,上面的测试代码对应的示意图,内存布局啊,内存布局图如下。也给同学们呢,板书到这里。哎,就是刚才我们看到这个图,就这个图啊,拉过来大家心里面就知道是怎么回事了。好,我这里标了一个线。好,把它拿到这儿。OK,好,这个就是我们讲的这一部分,就是对象的内存布局图,我们就说到这里。
我来说两句