00:00
好了同学们,那咱们就继续再往下了啊,我们上节课呢,其实写第一个例子呀,咱们这个其实是比较困难的啊,因为呢,我们之前没有接触过这个数组。是吧,所以这块呢,我们去,呃,第一个例子的时候,让为了让大家去接受啊,我又是画内存图啊,又是给大家讲这个内存结构啊,是吧,它的优点呀,它的缺点啊,它的语法是不是,哎,怎么访问怎么访问,咱们讲了很多很多啊,那么接下来咱们就第一个例子,只要过了之后,往后咱们就好说了,往后就好说了,好咱们一起看一下再往后面的这个内容好吧。来应该都回来了啊,都回来了,到时候那个我这个课堂笔记这块,我我再单独写一份啊,我总结一下,重点给大家写到这儿啊,我课堂上我就不在这写了啊,我在这总结总结,你参考一下这个地方的就可以了啊。行吧,那接下来咱们看第二个例子吧,这个第二个例子OUT1啊,各位打开这个窗口之后怎么办呀?在这儿打开打开打开是不是打开在这out insert加一个class,我们叫ray什么呀?Class啊。
01:04
RA test02啊,数组的第二个测试案例,PS vm ctrl shift f12最大化,那么这块呢,我我说了各位啊,就是我们静态初始化的方式,刚才在这里怎么着啊,我们已经看见了,是不是哎采用的这种方式。直接等号呢,后边跟一个大括号开始,大括号结束,中间用逗号隔开,那你说我现在如果采用,如果采用动态的初始化方式,初始化移位数组对吧?哎,声明或者叫定义一个数组采用什么呀,动态初始化的方式。啊,创建,那么我们应该怎么做呢?来int中括号A行吧,New int中括号是吧,写个四。那么这个意思表示创建什么呀?创建长度为四的。
02:02
Int数组。每个元素数组中啊,数组中每个元素的默认值是。零啊,是零。那么我们可以对这个数字进行变历呀,对吧?哎,变历数组,那么变利的话,For对不对?I等于几呀?零是不是?I小于什么呀?A点什么呀,Length。对不对,然后I加加,然后在这里呢,我们只要system.out输出我们数组下标为I的元素就可以了,没什么可说的啊,那么。数组中下标为这个的元素是。是吧,下边为什么呀。I的对不对,Ctrl shift f10运行一下啊。我们来看数组中下标为零的元素是零,一,0203,零,是不是,哎。
03:06
那么这一块呢,咱们,嗯。应该能够理解吧。哎,关于默认值,大家还记得吗?关于每个类型的默认值。还有印象吗?呃,数据类型。Verge。数据类型这块呢,有bit short in long,是不是float doubleing char。还有引用数据类型,那么上面这个呢是零班对吧,这个呢是零班,这个呢是零班,这个呢零呗是不是这个呢是0.0F吧,这个呢是不是0.0啊,这个呢是不是false啊,这个呢是不是杠U0000啊哎,引用类型的默认指示now。
04:05
能啊,什么意思,比如说现在我们在这里啊,初始化。一个类型的数组。采用什么呀?采用动态初始化方式。OBGS。好吧,哎,你一个什么呀,OBJECT3,那应该是三个down吧,三个长度吧,哎,三个长度。啊,动态初始化。所以啊,每个元素默认值是钠。对不对,For循环,现在呢,在这块呢,我们0I小于什么呢?OBGS点什么呀?NI加加,然后输出OBS下标为I的元素。
05:00
Shift。稍等片刻啊,你看闹闹是不是三个闹,注意啊,是三个闹。它其实并不是这个这个OBGS是那啊这个GS数组对象已经创建出来了,只不过数组对象那个每个盒子里边没放东西,就这意思。放的没放东西或者放的是对,你可以这样去理解啊。它内存图是怎样的呀,内存图如果画内存图的话。嗯。对23数组内存图。画一下啊,我觉得这个东西呢,还是有必要去深挖一下。好好去学一学是不是,哎这块呢,这个。行,这么地吧。这是一个啊。然后接下来呢,我们在这儿呢,有一个。
06:04
这方法区呗。是不是,哎方向去啊。然后呢,有一个。咱们慢慢去看啊,这有个堆。是不是,哎,对,然后呢,接下来这块呢,它有一个什么呀,站。占啊首先呢。它这个程序啊,第一步是类加载,那我就不再说了啊,类加载全部类加载进来啊加载进来。那么这个类加载这块我就不说了,这边我简单写一下。就类的类的信息字节码是不是某某点class对吧,包括静态变量啊是不是,哎这些东西,那么首先第一个呀,他走到这个焖方法这一块,应该是给这个闷方法分配占空间对吧,压占就行了。
07:01
啊,所以这块呢,我就写上了啊,它是一个闷方法占针。然后接下来这个程序呢,就等号new一个int数组,四个长度。什么意思啊?这就是那个数组啊,哎呀。这话。我觉得我应该从哪。复制一份。嗯。诶,你看。完美啊。来。在哪?这就是那个数组对象。啊,对象,然后呢,它里边默认采用的都是零,明白吧,这都是零。默认值,因为动态初始化,你没有指定值啊。
08:00
那么。这一块它有内存地址。明白吧,这块的盒子有内存地址啊。后边就不画了啊,整个数组第一个元素它的内存0X11作为什么呀?作为我们整个数组的一个数组对象的一个内存地址吧,啊,这是in特类型数组啊,那么这个代码应该是他吧过来啊。嗯,然后在内存图上画的话,应该在这儿呢,有一个什么呀,哎,这样的东西。然后呢,我这个盒子,我这个盒子啊。这盒子就是个变量呗,对吧,哎,这个A呢,其实就指向它的。A,变量里边保存什么呀?保存0X11,各位啊,0X11,而这个0X11指向了我们数组首元素的的内存地址。是这样的。这就是那个动态初始化。那如果是你换成object呢?换成OBJECT3是什么意思呢?它一样的道理啊,那往下的话就是这样的。
09:10
发一下啊。有点慢,各位。这个地方就是什么呀,就是none呗。啊,这个呢,也是什么呀,空的那啊只是把空间初始化出来。啊,就是你你你想你去超市购物,那个存东西的那个柜子是不是啊,寄寄存东西的那个柜子,柜子里边是没东西,那很正常啊,但那个柜子有啊。你懂什么意思吗?啊,这个是就是0X55吧,那这个可能内存地址是什么呀,是0X56。啊,那这个是0X57 0X57就大概是这个意思就行了啊,然后前面是什么呢?就是这个OGOOBGS了,Object。拿过来是吧,来放到这儿。在这呢,有一个盒子是不是这个盒子里面存的是什么呢?存的是0X55啊,0X5数组首元素的内存地址啊,这个OBS就是它。
10:09
啊,就是它,然后它就指向这个。指向这啊。来,先来画一下这个意思。嗯。是这样一个情况,各位啊。那如果你是词缀类型,那同样也是一样的磁钝。对吧,ATS利用一个string。对不对,哎,给个三个长度对吧,For循环。对不对?输出谁呀?STRS这个数组下标为I的元素吗?是不是,哎小于谁的sts点什么呀,Les吗?哎,那你这块可以打印一条横线出来,是不是这样加以区分走。你下边的也是一样的啊,是三个闹。
11:00
一样啊,当然你也可以采用静态初始化的方式啊,采用静态初始化的方式啊。词论数组吧,STRS吧,二行吧,哎,然后。哎哟,这个我还是没有研究过这个各位没有没有没有意义,我只知道他的他的这个。它的这个引用类型这个东西啊,它这个空间大小是一样的。他占用几个字节,我印象当中应该是占四个字节,你可以查查相关的资料啊,我不太确定啊,应该是四个字节。啊,应该是四个字节内存地址啊,应该内存地址应该是四个字节啊,就是这个方框的大小应该是四个字节啊,我印象当中以前我应该是看过啊,可以看看,可以研究一下啊,研究一下。但这个研究意义不大啊,研究意义不大。来那这块的话,咱们大括号写上,比如说我们写上一个ABC加上一个双引号deff加上一个XYZ啊来你看是不是,哎,我们for循环,然后呢,I等于零,I小于什么呀?STRS2点什么呀?Les对不对?哎,然后接下来I加加,我们输出谁呢?STRS2对吧,下标为I的这个元素。
12:21
那你看你这会儿再去输出,就是abcdfx y z嘛,来我们再编译在运行是吧,你看ABCDFXYZ。是不是,哎,那你存储object呢。存储object采用静态初始化呢?OE出来。是不是O2出来。是不是object o3谬出来是不是,哎,然后接下来是object数组o bog。或者是objects,然后呢,大括号写上O1逗号,O2逗号是吧,O3。
13:07
对不对?哎,然后接下来for循环,哎,I等于零,I小于什么呀?你这个object点什么呀?I Les,然后I加加输入什么呀,Object中括号下标为I的元素啊。是不是这里会掉它的toth论吗?是不是print LN这个方法会自动调用我们的这个对象的toth方法呀,因为从OBGS这个数组下标为I里边取出来嘛。你可以把它分开写,我是合成一行了啊,这个事儿还得再说一下。有同学可能就是还没反过来这个弯OGS这个数组下标为I,是不是取出的是一个object?是吧,输出。这能看明白吗?你上面不是有一个object数组?
14:02
对不对,然后每循环一次数组下标为I,你从盒子里边取出的不是object吗?那object输出呗,它会调什么呀,调to string方法呀,引用嘛,是不是,哎,所以这一块呢,我们把这两个注释了。各位把它放开。来它会输出什么呀,类似java.language什么object符号什么什么什么什么什么16进制,对不对啊,有这么一个东西啊,这么一个东西来输出三个吧,应该是因为是放进去三个嘛,123嘛,是不是哎放进三个啊。来,接下来我们去运行。啊,123。是不是三个object呀,哎,是这样的,那当然你除了这种方式,你还有别的方式,你怎么做呀?Object数组object对吧?哎,然后大括号直接一个object行不行啊。
15:00
再一个行不行啊。对吧,再new一个object行不行啊,没问题。对吧,哎,你你这种写法和你上面这种写法一样,只不过你拗完之后付给一个变量,变量传进去,我这个直接new就放进去了,New放进去,New放进去啊来再走一个。Young。一样的啊,一样的各位。那么现在大家思考一下啊,一个问题,什么问题呢?就是我们这个程序。什么时候采用静态始化的方式,什么时候采用动态初始化的方式。各位。就是说我们刚才讲第一个例子的时候,我们采用的是静态初始化,对吧,我们讲第二个例子的时候,大家看是不是采用的是动态注射方式,是new后边中括号加一个数字啊。对吧,哎,加一个数字,那你说我们什么时候采用静态,什么时候采用动态啊。有没有思考过这个问题啊?就是什么时候采用静态初始化方式,什么时候使用动态初始化方式呢?嗯,各位。
16:14
对,就是当你当你创建数组的时候。确定数组中存储哪些具体的元素。元素时啊,采用静态初始化方式啊,当你创建数组的时候不确定。不确定将来数组中存储。哪些数据?你可以采用动态初始化的方式。预先分配内存空间。啊,就不确定将来数组中存储哪些数据,你可以采用动态初始化,也就是当当你在创建这个数组的时候,你本来你就知道这个数组,数组里边存啥,那你就采用静态的这种方式,大括号开始,大括号结束就完事了。
17:13
啊,那如果说你不知道呢,不知道你就采用这种方式,对吧,你先预分配空间不就行了吗。对吧,先预分配一个空间。给个空间你看。是吧,哎,给个空间啊。到后期你愿意怎么着?怎么着,比如说你现在初始化是零,那你可以后期赋值啊,对吧,后期怎么着赋值对不对啊后期赋值。多肽还没说呢啊,没到那个时候呢。咱们同学们总是早我一步啊。后期负值来A中括号零,负一个值。对吧,A中括号一负一个值对吧,A中括号对吧?哎,再负一个值对不对,A中括号再赋一个值啊,后期赋值啊,赋值之后你再去变利。
18:14
那就不一样了。对吧,给第一个元素,第二个元素,第三个元素,第四个元素嘛,一共四个元素,你千万别越界了啊,注意越界啊,注意下标越界,注意下标别越界。走。原先四个应该都是零。给他改了之后,你看里边是不是存的,就是一一百一幺幺幺二二二是吧,啊,就是这个东西还是很简单的啊,不难,嗯不难。嗯。
我来说两句