00:00
行,那这个概念的话呢,我们就先说到这了啊,那昨天呢,我们讲这个最后这个练习的时候啊,哎,就是关于后边这个student的时候,然后课下呢,也有同学呃又问哈,关于这个结构的话呢,就整不的不是特别明白哈,这块呢,我们简单的对它呢,再画一下这个内存的结构图啊,简单的来画一下,就是关于咱们这个客户的这个问题的啊。哎,我我就画到这个题目的这个后边了,就是这里边呢,最核心的一个问题呢,就是首先呢,我们这呢,去拗了一下这个string啊呃,扭了一下这个student,这是我们用的这个数组这个结构,然后这个student本身呢,是长这个样子的。哎,核心呢,我就把它这个属性呢,哎这个粘过来啊,方法那个我就省略掉了,这是咱们这个student的这样的一个结构,然后呢,我们这样呢,去给他拗了一个这样的数组,哎核心的话呢,我们就看这个结构啊,把这个一呢我就先去掉了啊,那这呢是咱们在这个may方法当中写的这行代码,哎main方法一执行,我们呢就考虑到内存中的一个加载,所以呢先主要看这行代码,这个时候的话呢,我们还是有这个占空间和对空间。
01:13
这炸。啊,这个堆啊,这我就把它这包进去吧,这样啊,嗯,那在占空间呢,我们这生明了一个叫students ste这样一个变量,对空间中用了一个数组,哎,咱们前面都讲过这个结构了啊,数组这块呢,长度是20,这个呢,我这长度有限哈,我不妨呢就给它改一改,就换成一个五吧,啊短一点啊插入一个,哎,表格这个呢,长度是五。啊这么着,然后呢,这里边儿会有一个首地址值。这是咱们翻来覆去的都在说的事地值呢,诶我们这给一个啊0X,比如说7788,把这个值呢,付给我们占空间中这个sts。
02:08
行,通过这个地址值占空间的sus呢,就能指向对空间中你创建的这个数组实体,哎,那么这个此时呢,我们没有给这个数组的每一个元素去赋值,所以对暂时呢,他们都是no。行,那么此时呢,我们第一行代码呢就搞定了,第一行代码就搞定了,然后在这个后面的话呢,我们通过一个for循环的方式去给这里边儿的每一个呢去赋值,这呢我就不写for了,不妨呢,我就给其中的第一个元素做一个赋值,那因为呢,我们每个位置呢,放的是一个叫student,那这时候大家要注意的一个点就是咱们呢,说数组本身,这是数组的类型啊,数组本身呢,这个类型是引用数据类型的,数组的元素是在这儿呢。
03:09
哎,数组属于引用类型,数组的元素啊,既可以是基本数类型,也可以是引用类型,那只不过咱们这个引用类型呢,是咱们自定义的一个类啊,类呢本身就是营类型了啊呃,也就是说咱们这里边的每一项呢,放的呢是一个student类型的。啊,数组的元素可以是任意类型啊,所以是student呢,也很自然,这个你从情感上你得接受啊,比如原来呢,我这放个in,你知道放一个double你知道放一个string,你也知道放的student了,蒙了没有什么大不了的,不就是一个变量吗?是吧,任何类型的都可以,那student当然可以啊,哎,我这呢,就放的是这个student类型的,哎,那目前呢,因为你是一个引用类型,没有复合值,那就都是now,那下边呢就去赋值,哎赋值呢,这就是第一个位置,第一个位置负什么值,负什么值,你看人家类型,我是一个student类型,那你肯定是不是得负一个student呀,对,然后呢,Student是一个类了,既然是个类,你负的这个值那就是个对象,对象呢就得拗,所以很自然的,你就得去new一个student。
04:15
哎,这我就拗好了,哎,New这个student咱们说了,只要是new的结构都是在堆里的,所以你new的这个student呢,我们就得给你去,诶造一个这个大家要小心的就是它可不是说把这个对象整个塞到这儿了啊。这成不下的,咱们这里边儿又强调翻来覆去的也强调过几次了,就是说引用类型变量它的一个值是吧。这我写到这一个注吧。诶,或者我我我不写这儿了,我写到这儿吧。写到咱们这里边,呃,刚才这写在这啊,这是相当于咱们这个优化这个内存的时候的一个说明啊,那说明什么呢?就是说引用类型的变量。
05:02
啊,只可能存储两类值。啊,两类值,一类呢,叫做空值。哎或呢就是低质值,哎这个要注意啊,只不过这个地质值大家呢,我们只是呃,通称叫地质值啊,其实这个地质值里边它也是包含这个,哎,这个变量它的类型啊,哎,它也包含这个变量的一个类型了,哎这个大家也稍微关注一下啊呃,就比如说呃,我这儿呢,比如写个class,咱们造一个比如叫phone手机,哎,然后在这儿呢,你看我写个这个main方法。哎,下边呢,我们去拗一个封的一个对象,稍等一下去看啊来,我这扭了一个他的对象,此时呢,我去打印一下咱们这个P,如果上边这块,比如我们先没有new对象,我这写成个闹,那你打印出来的话呢,它就是一个闹,哎,这就咱们所说的是这个值啊,但是你要是用了这个对象了,我再去打印它,它就是地址值,只不过这个地址值当中呢,我们会看到它呢,其实也包含了这个类型。
06:10
啊,那其实这个地址里边是包含变量类型的啊,就这个问题啊,写这个啥,说这个这句话不是不应该是创建五个新地址吗。这怎么就创建五个新地址了呢?我是创建了一个数组是吧?对,这不是在这创建的是个数吗?你指的创建新地址,你要说这创建个新地址,这可以。这里边可没有地址呢,这不还没赋值呢嘛,哎,这要注意一下啊,这还没有赋值呢,都是no,这呢你可以算成是一个呃变量,然后不能叫创建地址的啊,只是说附了一个地址,就是你这个数组的首地值啊,仅此而已,没有了啊行,那接着呢,我们再说啊,这个呢是包含地址的,大家要注意,那现在的话呢,我们这个每个里边呢,都还是一个闹呢,哎,这外是个闹呢,咱们讲string的时候,你这样写,咱们打印不也是闹吗?
07:06
你都知道,那这个student不也应该一样吗?大家都是类类型的。所以大家呢,现在有个小技巧,就是凡是呢,现在你我用自定义类型,你不清楚了,你就想string啊,String是个类,那你这个也是个类,那大家就应该一样啊,你这样啊,那么我们下边呢,又了一个student,那就意味着我又重新造了个对象,那这个对象它就会有首地址值。那我们呢,就来个地址值这个我叫1122。然后这个地址值呢,咱们就附到这儿了,这就咱们所说的你这个这个位置呢,是一个student顿的类型的引用类型的变量呢,不是now就是地址,那现在呢,我给你拗了,那你就把地址给我把他干掉。哎,这个位置呢,我们就写了一个叫0X啊,1122。
08:00
哎,然后呢,我们呃,这样的一个地址就指过来了,是这样的一个情况啊,然后呢,咱们这呢是一个对象,那对象的话呢,咱们在这个内存当中就会考虑它的一个属性,那恰好呢,这个student确实还是有几个属性的啊number state和score,那属性的话呢,现在咱们都是非静态的了啊,哎,它呢都应该存放在堆空间与这个对象实体当中,那就意味着我们的这几个属性就都在这里边呢。Number as data。哎,还有这个四高,哎,都在这儿。这个稍微再大一点啊。行,然后呢话呢,就是我们这个变量,嗯,是一个属性,涉及到他们这个值的情况,我这里呢,都没有去赋值啊,这个比如说默认我这个state负一个吧,啊,比如我这负了一个一啊,咱们体会一下,那我这有一个值,那首先呢,涉及到他们先呢,叫默认初始化值啊,我们讲的细一点的话呢,就是首先他们是整形的先都有这个默认值零。
09:11
然后的话呢,我们关于这个state呢,有个显示的赋值啊,这个显示赋值呢,把我们这个默认的零呢给干掉,改成一。哎,是这个样子的,哎,那就意味着呢,我把这个结构呢,它这个太大了啊,稍微小一点。哎,这呢是咱们用到的这个类的这个结构啊,哎长这样,它呢不在咱们这个执行的这个范围内,咱们执行的代码没方法都在这儿了啊考虑这儿也就意味着这个代码的后面,如果呢,我们去c out一下,C out呢s tos0,它下面的叫state也好,还是其他的属性也好,这个呢是肯定可以出来结果的。一对吧,哎,这个没问题,好,那再问一句,如果呢,我去c out,我叫sts,这我写一个一。
10:01
那问这个时候会不会出异常,不会的话呢,结果是多少,这个是no,这不就闹吗?这个没问题,好,那在这后面呢,我再去。哎,我这写个一下边呢,我写一个他的number,这个什么情况异常,这就异常了,什么异常啊,对,这就是控制人的异常。哎,这个控制异常就是咱们面向对象里边呢,最典型的大家看到的一种异常方式啊,就是我们现在想调这个number,你看一下这个点之前的这个结构是不是一个nor。如果是闹,那就意味着没有指针,没有指针去指,它下面的结构就是控制针。你看这不上面也写了,它是no吗?就控制帧了啊,那你要想保证它不控制帧怎么办呀,赋个值就完了呗,对吧,比如说就跟上面一样sts,我这写一个一,然后你再去new一个student。
11:05
哎,我去扭了,扭完以后你再去输出咱们这个number。这这什么情况,诶这时候呢,这不就是零了吗?哎,然后这个代码呢,这不就相当于是你这块又给他整了一份,哎然后这呢有一个哎再再整过来,哎然后这块呢,也也有个地址值。来干掉,然后地址值我就不写了啊,省略了,哎,然后呢,把这个直过来,然后你通过sts找到第二个元素,找到它的number,那就是零,一开始没有,没有那就闹闹去找,那就空,所以就异常。啊,大家去体会一下它的过程是这个样子啊,这呢还是咱们一个叫呃对象对象的内存解析,或者呢,在复杂一点呢,叫对象数组的一个内存解析啊啊由对象,你看这里边每一个位置都是一个student类型的对象了,由这个对象呢构成的一个数组。
12:02
其实原来string那不也是一样嘛,String呢,我们就是一个类,然后呢,他放的其实也是一个一个的对象啊,不过我也知道大家为什么关于string能清楚,他不清楚是因为string呢,咱们现在呢,咱们写的时候我都没有去new string。是吧,我们直接是不是string s等于一个,哎,ABC啊,你没有去new啊,因为string呢,它还比较特别,它可以这样去赋值,也可以去拗啊,也可以去扭啊行这个呢,大家呃,再去体会一下这个问题啊,叫对象数组的一个内存解析啊,大家呢,再去下来想一想。
我来说两句