00:00
好,看今天呢咱们这五道问题啊,那今天呢,大家写来看就比较快一些了,出的题目感觉稍微简单一些是吧?嗯,但是这几道问题的话呢,还是非常重要的哈,就是我们在前一天呢,主要讲了两个内容,第一个呢是关于eclipse的一个使用,呃,这个呢,咱们从讲数组开始呢,就开始用这个eclipse了,哎,后边呢,大家慢慢的去习惯啊,这里边常用的一些操作,行,然后第二个问题呢,我们就开始讲这个数组,那数组呢,咱们主要讲解了就一位数组和二位数组啊,这个数组这块呢,咱们讲的时候一共是有六个知识点,一会咱们复习的时候呢,再详细的说一下啊,那这里边呢,提到了这样的五个题目啊,这五个题目的话呢,涉及到这个相关内容,哎,大家呢都得掌握啊,如果呢,你看自己答的不好的,下来呢,你看哪个写的不对了,写不出来了,这个一定要自己再写一写啊,首先的话呢,提到叫异位数组的初始化啊,那这个肯定是你得掌握的啊,数组初始化创建你都不会,那后。
01:00
不是,更别谈往里边去存数据,然后呢去去便利是吧,做一些所谓的算法题目了啊,这个是最基本的了啊,这儿呢,我没有提说用什么类型,所以呢都可以啊,都可以CR,这个我们直接还是在这个诶CTRLC一下啊,咱们写到这个TST里边。对零好看一下啊,一维数组初始化,这个就比如说int吧,诶这个我们造一个数组名,又一个int,然后这里边呢,诶直接呢光写了一个长度,这个我们叫做什么初始化,诶动态初始化啊,诶就是大家呢,就是造数组的时候呢,呃,实际开发当中也不用刻意的去记啊,这个叫动态,那个叫静态,就是这个词的话呢,你不记住也没事,但是呢,创建方式一定得都掌握啊。还有一种我们换一个,比如说死string类型的,呃,AR1啊等于new一个,呃死string类型中括号再来一个大括号,诶在这里边呢,把具体的这个数据啊都给大传上,比如说这个叫Tom,这个我们传的是人名了啊to姆,比如说这个Jerry,哎,Tom和Jerry啊哎再来一个比如说呃等等,诶这样的就可。
02:25
可以了啊嗯,这个大括号里边的话呢,我们这个用逗号隔开每一个数据啊就可以了,这个数组呢,我们就是两种创建方式,这个呢叫做静态呃初始化啊,这个静态初始化呢,如果是这样的写上一行了,哎,我们说呢,其实这个位置可以省略掉,哎大家如果写的时候把这个省了是可以的啊这是可以的,这呢相当于是有一个类型的推断啊,那不管是动态初始化也好,静态初始化也好,哎这呢,我们提到了这个数组的一个性质啊,这个不用不是这道题目当中啊这我们顺便呢,在这说一下什么呢?说数组一旦初始化,它的长度就是确定的是吧?哎,我们写一下啊,数组那一旦初始化啊,其长度啊就是确定的,嗯,就是说呢,我们这个时候啊,当你这个初始化完成以后,我们接着呢,就肯定可以去调它的一个LAS属性。
03:25
啊,也一定呢,会输出它的一个长度啊,这就我们所谓的叫长度是确定的,那么接着呢,又提到一个它的长度不但是确定的,而且呢,长度是不可修改的啊,说数组长度。一旦确定。嗯,确定啊,就不可修改。呃,这个呢,是咱们在讲这个数组的一开始这个性质的时候提到的啊,嗯,咱们数组呢,在内存空间当中是一段连续存储的空间啊,连续存储的分配了一块空间啊,连着有这样五个地方,那如果说呢,现在这五个这个位置呢,存储我们这个数据乘不下了啊,你可能还会有第六个第七个元素,那是不可能说我们在后边直接给大家去补的,这是不允许的啊,也就是这个长度是五就是五了,那你只能是再重新再造一个数组啊,比如说你这个还需要再加两个,那就再造一个数组,你让他那能够存这个七个数据。
04:28
得这么着了。哎,然后呢,把刚才你这个数组中的数据呢,都给大家一个一个的复制过来,得这样才行。啊,得这样才行,那举个十几中的例子,你就比如说呃,咱商务现在是在咱们这个洪湖科技园这个综合楼里边了啊,比如说呢,咱们一开始过来租房子的时候呢,假设这个三层这一边儿啊,这一边有这个七个教室啊,咱们就咔把这七个就全租下来了啊,那就意味着咱们最多呢是可以同时有七个班在这上课的,那如果说突然后边呢,说又得加俩班,又得加两班,不是说你想往这块加就加,假设呢,后边这还有两个教室啊不是你,呃还有两个空间不是你想加就能加的,那有可能人家这空间呢,被别的这个公司占用着呢。
05:11
那那你这时候你就不能往这去扩展是吧,那速度也是一样啊,这个内存空间中你这块加呃用完了,你想往后用,那有可能后边的空间呢,被别的这个数据呢占用着呢啊,你就不能往后拖,这就我们所说的,一旦长度确定了,就不可以再对它进行修改了啊这种好这呢是咱们说的第一道问题啊,这个性质的话呢,需要大家理解的基础之上给他记住啊。嗯,第二个说写出二维数组的初始化的两种方式,一维二维这块呢,也都需要大家清楚啊,嗯,二维,然后得我就还拿int型举例哈,两个中括号A2,另一个in特,嗯,这个呢,咱们提到了说动态初始化呢,其实又分成两个方式是吧,对一个呢,是把这个行列是不是都写上对,CTRLC。
06:08
哎,再一种呢,就是行可以写着列,可以去掉啊,可以去掉啊,像这两个的话呢,大家开发中这个整个咱们动态相当于静态来讲,咱们讲过了,说呢就是嗯,先这个,如果说你这个数组先长度确定好了,然后具体的数据还没有,你就用动态的,如果一开始数据也都有了,就用静态的就行,那动态呢,这里边儿又写了两种,这两种大家怎么去选择呀。就是你选用这个还是选用这个怎么确定啊。嗯,你看这个里边呢哈,咱们相当于一开始呢,咱们也画过这个二维数组的内存解析了哈,它其实在这个堆空间当中,一开始实际上呢,还是创建了是不是长度是四的这样一个数组啊,对啊,然后像上边这种方式呢,是不是创建了这个以后,顺便呢,给它的每个元素也都负了值了,每个元素的话呢,是不是又是一个异位数组,长度呢,是三,把它的地址是呢给到它,咱们也讲这个默认初始化值的一个情况啊,然后下边这个都是这样。
07:19
哎,都如此啊,每一个呢,都是稀牛的一个数组,哎,是这种情况的,那这个里边你会发现它每一个元素其实都放三个,都放三个啊,那如果我们要是有一个数组,呃,一开始这个也是四个元素,但是后边这个元素的个数不一样了啊,比如我这个里边呢,有有五个啊,这个呢有三个,这个有七个,这个有呃四个,呃,像这种情况的话呢,是不是用它就不合适了,对啊,就是我们下边这个呢,针对的就是呃,你这个从二维的这个外层元素来看呢,每个里边呢,具体的异位数组的长度又不一样了,这个我们得得这样的方式去创建。
08:00
啊就像说呃,这呢是咱们这个年级一样,比如说大家上上中学的时候啊,这个年这个整个是一个年级,这个年级里边这个是一班啊,一班呢有50个人,二班呢有30个人啊,三班呢有40个人,这时候呢,你得用用下边这种方式去创建啊,它里边这个元素个数就不同了啊属于这种,好然后这我还拿这个int举例吧,嗯,还可以呢,诶叫做静态初始化,哎,仍然两个中括号里边不写后边一个大括号,哎在后边这个大括号里边呢,我们再去给它,哎这个因为外层的内层它又是一个数组啊哎,我这呢就随便的这样举几个例子啊,附上一些数。哎,就这样,那这呢,就我们所谓的叫静态初始化行没有了是吧?那这个大家清楚啊,嗯,下面的话呢,说如何去遍利二维数组,哎,我这就没有考这个一维了,因为你二维二会一维你肯定也也就会了,嗯,那这块呢,我就快速来写一下啊,I等于零,I呢小于什么A2点。
09:17
Lengths,那这时候这个lengths获取到的值是几啊,对三啊在这里边这个for啊,Int一个J等于零,J呢小于A22I点对lengths啊呢加加一定要注意哈,这个是ari啊,那在后边呢,我们就做一个输出操作就可以了,呃,我们可以呢,先不换行,比如说啊ARI接哎这么着哎,你可以呢,让这个元素之间,其实这就已经输出了哈,只是为了可能好看一点呢,你可以给它加上一个空格。空格会来一个杠T是吧,也可以哈,哎,当这个这一行输出完以后啊,下边你可以来个换行。
10:12
哎,这呢就是一个换行操作啊,哎,其实这个呢,也不是说非得要有啊,咱们说便利没有说非得让你输出的效果一定是啊这个这个呃,第一行呢是放这个,前边这个是吧,呃呃,放这个,然后第二行呢要放这个,第三行放这个也没这样说,只要你遍历一遍就行啊,所以说这个呢,加不加换行无所谓啊,主要呢,就是你把前面两个for循环要写对啊,这个是这个情况,好,下面说不同类型的一维数组元素的默认初始化值各是多少,这个我找个同学来说一下。这个你说做这说就行,印的是零,In的型是零,然后布尔型是false。
11:13
嗯,类类型,那不管是类类型啊,类类型只是属于引用类型的一种啊,所有的引用数据类型是不是都是闹啊。哎,负电型是0.0,嗯,这块呢,说的不能光说int了,咱们整形是不是都是零啊,嗯。诶叉类型是多少?呃,二次玛,这个值为零的,哎,这样的一个值啊行,哎,这是就是这样个情况,好这呢是咱们说的这个不同的类型的啊,异位数度元素的默认初始化值,诶这个呢,大家也都得会啊,就是后边呢,咱们讲类中的属性的时候,属性的默认初始化值也是这个啊哎,待会咱们讲到的时候呢,再说好再下一个呢,说叫一位数组的内存解析啊这个题呢,咱们前面呢是讲课时候画过两个啊,一个一维,一个二维,那这个呢,咱们也再稍微的带着大家再画一下啊,就是这个呢,还是需要大家能够清楚的啊,可能刚开始画的时候呢,稍微有点吃力啊,但是你画一画的话呢,其实更有利于你去理解咱们写的这个代码,好就这样的这几行。
12:33
来看一下啊呃,目前的话呢,咱们画这个内存结构的话呢,只会涉及到栈和堆,呃,其他这个结构呢,其实还用不太到啊啊这个知道底层底层这样啊哎,站和堆,这个站和堆呢,也是咱们这个内存解析当中用的也是最频繁最多的啊好,那么首先呢,我们看第一行,我们呢,就是创建了一个数组了啊数组呢,呃,这个其实咱们再多说几句,讲课时候也提到了哈,咱们现在写的代码呢,其实全放在main方法当中的啊,在这个方法当中的这个变量啊,它都是叫局部变量。
13:11
啊,你先有这样个印象,后边咱们讲面向对象呢,再展开啊,那是局部变量呢,就都会存在咱们的站里边啊,所以呢,我们这呢叫ST2S是放在这儿的啊,那接下来的话呢,我们这呃要new一个结构,呃,New的典型的结构呢,就是我们讲的对象,下一章要说的面向对象里边,我创建对象要用像咱们这个scanner,其实咱们都用过了啊,又一个scanner,那就是造了一个对象啊,然后用一个数组,也是算造了一个,其实也是一个广义上的一个对象了啊,那逆出来结构呢,都要放在堆空间中,我们这儿呢,创建了一个长度V5的一个数组,诶,而且呢,在内存空间中,我们明确说了它是一段连续的空间,所以要连着放,长度是五。
14:03
把这个结构呢,哎,我们就放在堆里了,然后放在这以后呢,我们通常呢,当你开辟好这段空间以后,我呢就知道它的首地址值了,我们也是通过首地指值这种方式呢,来找到对空间中的这个数组的啊这个小线它也是一个蓝色的了啊,改成一个红的。行,那我们把它这个默认的这个这个首地值给大家标志出来,这呢是用一个16进制来表示的啊,比如89AB,然后将这个首地值呢,赋给我们占空间里边这个变量啊,叫0X89AB,诶接着的话呢,我们通过占空间的这个地址值就可以找到咱们对空间中你创建的这个数组了,这其实也是一个指针啊,也是个指针,这里边需要注意的就是咱们这个里边叫89AB,它并不是真实的咱们内存当中的那个真实的地址。
15:02
哎,这个跟像C语言这样是有区别的哈,咱们这个地址的话呢,是这个Java虚拟机给我们虚拟算出来的一个哈希值,对,它是相当于屏蔽了底层真实的内存的那个地址啊,不需要大家呢再去真实的内存地址当中去往后移几位是谁是谁是谁啊不用那样了,所以比C语言那个指针还是要简单的啊好,那这样指过来以后,嗯,还没完事,我们第一行这个时候呢,哎,既然你数组都造好了,它里边也就要考虑这个值的问题啊,你有没有显示负过值,所以这时候都是诶,No。行,那这块呢,就根据我们这个数组到底是什么类型,大家去决定这个默认初始化值就可以了,我们这呢是一个string,所以呢就都是no了,接下来这第一行代码就算搞定了啊,接下来的话呢,我们给这个第二第三个元素,其实啊角标是二的,这个元素呢,复制为Tom啊,通过我们这个占空间的HTS找到对空间中的啊,所以是二,其实就是第三个元素,哎,把这个元素我们给它干掉。
16:17
给它改成叫Tom。你看给它改成叫Tom,哎,那这一行呢就搞定了,哎,再下一行H2S等于new一个string,哎,这是不是又重新再造一个呀,对啊,就是大家呢,你记住这个点,凡是呢,我们在代码中你看到new了,只要看到new了,那一定是新造的啊,所以这呢,我们再重新的创建一个长度是三的这样的一个数组。哎,这个数字我们,诶摆的有点挤了啊。好,比如我们就放到这儿了啊,那自然而然的,它也会有一个首地址值。
17:04
哎,这个地址我们也附上啊,0S,比如77188,哎将这个地址呢,再给到我们占空间中的这个sts,哎,占空间这个地址呢,就没掉,没有了,把它给抹掉啊。换成0X7788,诶接着的话呢,我们这个XTS,通过这个7788呢,就能找到Q空间中你新创建的这个数组啊,这个数组的话呢,因为没有显示负过值,所以呢也都是几个闹。哎,就是这样,那这道题的话呢,其实就结束了,哎就这样的一个情况,那当我们再通过这个hrs,比如说下边我再加一个代码了啊,就是ST2S,我呢在这个二把它呢进行一个CR的输出,这个结果是多少?哎,这个结果就是闹了,哎,那如果说你试图说啊,我STRS想着写一个四。
18:02
什么问题啊,哎,这时候呢,就报错了,哎就是咱们所谓的这个异常了,哎就是因为我这个长度是三,是不是就不可能有索引是四的这个元素了,对你说诶原来这不是有吗?原来是有,也就说你这一行代码如果我是放在。这块的是吧,放在这块执行是不是就不报错呀?对,因为你那时候指的还是这个数组啊,我有这个索引是四的这个位置,但是你要是指向个新的,这就没有了,所以这个呢,为什么报错,为什么不报错,怎么回事,这个大家呢,都是基于我们这个内存呢来考虑,哎,就这样个情况啊行,那关于这个内存解析呢,咱们就画成这样就可以了啊呃,实际上的话呢,要严格上来讲。哎,这是我们多说一句哈,严格上来讲呢,这个to姆实际上是不在这儿的,我讲课的时候我也说过这个事儿啊,咱们呢,就是大家先诶这样放着啊,到后边呢,咱们给大家去讲,说它真实是放在哪儿的,我们这块呢,给大家稍微再说一下啊,你有这样的印象,就是咱们讲这个内容的话呢,呃,有个先后顺序,不能一下子把这个所有的东西都给它抛出来,一下子感觉就晕了,是吧,咱们一步步来啊呃,先呢,主要体会的就是这块这个结构真实,这个Tom在哪呢?它是存在这个叫字符串常量池当中的啊嗯,哎,免得有些同学呢,回头又看其他的地方一看,说老师你这个讲to姆讲的不对呀,哎,这咱们先呢放在这儿,你先重心呢先在去理解这块,先重心咱们没有放在这儿。
19:32
啊,这个string呢,它比较特别啊,它涉及到string呢,我们有专门的一个常量池来放它,就它比较特别啊,这呢,这个常量池我就放在这儿了,在这个常量池的话呢,它其实又放在方法区当中,所以你看这一说这就复杂了啊,那我们这个呢,你假设它是方法区也行,这样方法区呢,里边呢,有个位置呢,就叫做常量池啊,字符串常量池,字符串常量池里边这个我们放一个块吧,这就是那个所谓的字符串常量池,在这个里边的话呢,我们放了一个变量,准确的说应该叫一个常量了啊,叫Tom啊,其实是这么着。
20:12
其实是这么着啊,那其实真实的话呢,这个Tom不在这儿,Tom是在这儿的啊,那这个位置,那那放什么呀,就是你这个位置不写no了,那那到底写的是什么呀?对真实的话呢,其实这是一个地址值,这样的话呢,咱们不是才可以统一吗?什么叫统一呢?就是对于引用类型的变量。它存的呢,其实要么是个no,就是没有值是吧,要么呢,这个引用类型变量,它放的就是低值值。哎,这个结论的话呢,咱们通过讲下一章变量对象的时候呢,还会不断的给大家去说,就是再总再说一句啊,就是引用类型的变量,就是比如说你这个对象的对象名,数组的这个数组名,像咱们这个造的这个HTS,这不也是数组类型的变量嘛,它就引用类型的是吧,只要是引用类型的变量,它里边存的呢,要不是no就没有复合值,要么呢,存的就是地址值。
21:16
哎,基本数据类型变量呢,就是,哎,就是你的本身能储存的那些值是吧,你是整形的,那就只能放整形,那默认值呢,就是零啊,其他的呢,也类似去考虑啊,所以说咱们这个string来讲,本身人家string是一个引用类型的嘛,你既然是个引用类型呢,那就是你要么放地址值,要么呢就是no,哎咱们刚才呢,像这些这都是nor,它这个位置呢叫Tom,哎,它并不是把这个Tom真实的放到这儿了,实际上呢,是在长岭池里的,我们这呢放了一个地址。啊,实际上呢,是这种情况啊,大家讲课的时候呢,大家先不用把重心放在这儿,哎,咱就先知道啊,就我就先,诶临时的写到这儿了,你主要呢,先关注于数组这块儿的这个结构,重心放在这边啊,哎,这边呢能理解就可以了,这个结构的话呢,大家不用担心,后边呢咱们还会讲,所以呢,哎,这个呢先听一听,知道真实的这个情况就可以了啊。
22:10
行,真的是咱们的一个复习的情况。
我来说两句