00:00
好,那么刚才呢,我们讲的这个内存结构啊,其实说的算比较细的啊,这个呢,详细的内容啊,其实都在这个GM里边呢,会去讲解的啊,这个内容啊,诶我们就不深入的去说了,诶等大家呢,学到诶Java我们都会去应用了,而且用的也都挺好了,那么以后的话呢,在工作当中啊,你有必要呢,去了解一下这个底层是怎么回事了啊,甚至说呢,需要进行线上呃项目的一个调优了,这个时候你再去学习GM。这个GM呢,就有点儿类似于练武功的那个。九阴真经一样。哎,对,所以大家现在基本上你问任何渣va问题,你问我的话我都能搞得定,因为我GM我都已经看的还算可以了是吧,所以呢,我有护体是吧。诶就是这个啊,所以大家现在呢还不行,就是你有好多这个语法一些东西啊,你发现搞不定,只要有搞不定的东西呢,大家呢,现在你可以问我,你也可以去百度查。那当然基本上现在很多语言层面的东西呢,我都不用查了,因为我就直接呢去GM里面开始去往从底层往上翻去解决了。哎,以后大家慢慢慢慢你再去研究这个东西是吧,B站呢有一套课程,那个是我录的。
01:05
哎,不是推广啊。看一眼吧,反正是吧。啊,这个你就GM了是吧。哎,就这套是吧。诶播放量还还行是吧,诶就是这里边讲的有点多啊,现在不要看,哎,等以后你毕业以后再看啊。啊,这个呢,咱们就过了啊,然后咱们回过来呢,还是写点代码比较务实一些是吧,理论的东西呢,不着急整啊。好,直接我们看爱504啊,这里边儿呢,有五个练习,一个个来,首先看第一个。好,这呢需求啊,看一下创建person类的对象,设置对象的属性,然后调方法,一个两个三个啊然后呢,第二个对象,诶这呢实际上是没说这个类怎么创建,直接呢,他就把这个过程给说了一下,呃,根据这个呢,咱们往回翻哈,首先创建一个person类。
02:01
好,那么这个类里边呢,我们需要声明几个属性和几个方法啊,它这儿呢,其实说的是调用的事儿啊,那我们把这个代码呢,粘过来,方便我们去理解啊。哎,这里边呢,提到了三个属性,哎,我们就快速的去定义一下,诶,词性的name啊,In对性的age。X类型的真点儿是吧。啊,具体的这三个的,呃,这个这个表示的是什么,我这就省略了啊。哎,下边呢,提提到了三个方法。说调用study方法输出四五串。他在暗示你没有返回值是吧?Public。打啊。啊,这个我们直接输出了啊。哎,斯大。没问题啊,好收位置说返回位置啊,提示的非常明显。诶,返回A值,你这块呢,要写的可别写A啊。对的类型。那叫瘦。
03:00
配置啊。哎,一个age就可以了。好在下边叫I的A,呃,调用这个方法的时候呢,有参数啊,说给对象的A属性的值增加I的age c啊。诶public这个呢,他没说要不要返回值。那就写成Y吧先啊,I。Age啊,说int类型的叫I age啊。呃,因为呢,我们在方法里边呢,可以调用当前啊的属性啊,它其实呢,就让你在现有的A的基础上。加上爱的。A,那就可以了。比如说两岁啊,那你掉的时候呢,你诶赋个值13呢是二这呢是刑惨。那这个类呢,就定义好了是吧。哎,下边就是测试的问题。在这呢,来一个person。Test。哎,这样啊,来这儿呢,写一个main方法。呃,刚才呢,其实我们写的这个信息呢,可以呢,就同步的给他拿过去哈。诶,拿到这儿。
04:02
哎,他这还提到呢,说在创建一个对象的事啊。哎,就这样啊好,首先呢,我们创建一个person的实例,呃,你有一个person。呃,像这个代码呢,大家应该要非常熟哈,拿起来就得能写。好造完对象以后呢,下边我们去设置它的属性啊,这就涉及到我们去调用。呃,属性啊,诶后边你再去调用方法。OK啊。好,调属性,通过对象,哎,我们去依次调name。比如叫哎Tom是吧。12岁。哎,真的。串哎,这个字符。这个来一个比如难是吧。好,接下来我们去调用这几个方法了啊,通过P点调study。诶掉它啊P一点调收age。诶,这块你小心一点,调这个收位的时候呢,它就直接返回了一个A。
05:00
我要这块调完之后呢,你说诶我去打印,其实你也似乎看不出来他执行了哈。因为他返回这个数据呢,你也没用嘛。哎,那你可以接收一下啊,哎,我们就接收为啊。一个age。诶这呢,其实就咱们刚才讲过了啊,我们调用完这个方法呢,它有一个返回值,返回值呢,返回给方法的调用者。其实我理解成是他了是吧。哎,所以这儿呢,我就接收了。哎,OK啊,接收完以后呢,你得打印一下啊,A值是多少。哎,这样啊。哎,这不A的12啊,我们前面负的12。呃,有没有同学会想说,诶,我们直接这块调一直不就行了,怎么还得通过方法调呢?掉方法返回位置,我直接在这儿是不是就能掉一只。直接p1.21值是不是就行。那那干嘛这样调呢?现在来讲的话呢,就是说你想怎么调都行。
06:00
是吧,你愿意直接调属性你就掉,你愿意通过方法掉了,你就通过方法调都行。以后呢,我们讲封装性的时候会说建议呢,以后就不要直接调属性了。以后你要调方法,呃,调这个想看属性值的话呢,建议呢都通过方法去调,这是以后的事儿啊,现在的话呢,我们就放开了,想怎么调就怎么调啊。接着还有一个爱的啊。的,比如咱们放这儿吧。哎,刚才打印呢,这是12了是吧,现在呢,我们通过P1呢,我调IH,我写个二。哎,你看注意这个源码啊。我在你现有的age的基础上加了两岁。调完以后的话呢,我们再去调竖位置,把这个A呢给返回。问,你说这时候是多大了?是14不。是理解不?对对,你你要放碗一说,这不就加二加两岁吗?呃,你得知道呢,它这块加的这个age跟我们返回的age,它得是一个A哈。
07:06
对,你要不是一个A的话,那不就没加成吗。嗯,简单来说啊,这是占。这对。2P。指向了对空间中啊这样的一个对象,Name age gender,我就只写一个age了。然后呢,我们一开始指向到这儿的时候呢,这个默认值呢是个零,然后在这行代码时候呢,复制为12。好,紧接着调study跟他没关系,掉I age,这呢,是不是一个新的一个战争。战争的爱是13。那个行三咱们叫。就叫I1值吧,我记得是是吧,哎,这个行三的话呢,只拿这个十三零二呢,不这不赋了个值吗。然后我们通过P1呢,调的这个方法,这个方法体回忆一下啊,里边不是写的让这个A呢。加等于这个这个变量了是吧,哎,这个A是谁呢?哎,你看你拿谁调的哈,我拿P调的。那那其实这个A呢,指的就是P的age啊。
08:01
所以呢,P1的A值不就他吗?加了两岁不就在这变成14了吗?所以你下边再去调这个数的时候呢,把这个14这不就取出来了。注意一下啊。注意一下这个事儿。那整个呢,我们这个关于方法这个调用这块呢,这就说清楚了。诶,这块稍微的大家捋一下啊,然后呢,我们在创建一个对象叫P2。哎,叫P2了啊,那很显然,此时呢,这个p2.h呢多少。没有赋值啊。零吧。好的啊,然后呢,P2点我叫I的,我写一个。咱们这样啊,我把这个两行代码方便咱们看哈,我盯过来啊放这儿。我现在呢,P2呢调I age,我这写了个十,这个叫实参,传递给调用这个方法的这个刑参是吧,行参呢,在这里边呢,把它的值付给到我们现有的这个A值属性上。
09:06
这个属性问是P2的还是P的?对,谁掉就是谁的。所以呢,是在P2的A的基础之上呢,加了十岁。哎,所以呢,这时候你再去打印啊,P2点这个呢,我打印我也不直接调属性了,咱不有一个叫show age吗。这不第一个方法吗?哎,调研方法的时候呢,你这个返回的是一个age,这个age是谁的。对,还是谁掉这个方法就是谁的,所以呢,呃,其实就是P2了,哎,那咱们说了M p2加上十,那它这不就是十嘛,是吧?哎,那同样的我再去打印下P一点收位置。对,它这里边的A值多少就是你,呃谁掉就是谁的,所以呢,我们打的其实P的AP咱们上边这块。是14是吧。诶,这个注意。诶,看似有点绕啊,其实。
10:00
啊是14是吧,其实怎么着呢,就是。哎,只不过呢,我们演示了一下,通过方法呢,去操作属性了。之前呢是直接操作属性,现在呢通过方法操作属性,稍微的感觉有点绕。啊,但是你稍微的熟悉熟悉就行啊,诶谁调这个方法。哎,对应的这个属性呢,就是谁的前面也讲过了,每一个对象呢,都各自有一套属性。啊,别乱了就行。这儿呢,是咱们说的这个第一道问题啊。哎,结束了。第二道题。哎,这个题呢,做着应该会舒服一些。诶,声明三个方法是吧,这个呢,就作为我们方法这块的一个基本的题目了啊,CTRLC一下。新建一个class啊,E1202。哎,这个我们,哎就这样写了。描述我就写到这儿了啊。嗯,这个网,哎这样吧。
11:02
往后拽一下,但这个又得往前走。嗯。加空格的。有点强迫症啊。嗯,这样好看一点。对,这有人问我是啥星座的,我每次回答的时候都不好意思。我就网上那个被吐槽最多的那个。处女座啊。来看这个啊。第一个啊,说声明一个方法叫METHOD1,然后呢,诶,在这个方法中打印一个十乘八的一个新型的一个句型,哎,在main方法里边去调用。啊,那这块我们就写到这儿吧。哎,这个呢叫public。再叫诶MA1是吧。这样啊,诶,那这个题目的话呢,你看一下首先要不要反问值。还没说是吧,没说就先写成word了啊,而且这个题目呢,我们似乎呢,诶感受到其实也不需要,因为它直接在里边打印了啊,第二个呢,需不需要参数。
12:08
呃,那就看你有没有不确定的部分。没有像这十跟八呢,都非常确定,所以就不需要啊,这里直接呢,在里边打印一个满足这样特征的一个新型的句型就行,这就使用我们前面讲的这个嵌套for啊。嗯,这个位置呢,你愿意写零就写零,你要写零呢,这个位置呢,你记着。写十的话呢,就不要有等号了是吧,你要这写一呢,你这有等号啊。哎,这个细节啊。这个我就都从零开始吧。好,这个呢,For,再来一个I。嗯,再到八是吧。啊,这呢,我们就打印这个星。这个呢,就不要换行了。诶,打印完这一行以后呢,再换个行写完了哈。对,完了以后呢,我们现在要调用哈,调完的话呢,诶这块小心一点啊。这个时候的话呢,呃。跟以前有同学问过啊,说这个不是说方法里边能直接调方法吗。
13:01
哼。对。这个要想解释的话呢,我们其实得用后边一个知识点啊,你看这个方法比较特别。有一个修饰,修饰的这种跟没有修饰的这种级别不一样。咱们前面呢,像写的这个代码。哎,讲讲咱们讲这个知识点这里边儿。这里边这个代码你看这个呢,叫eat,这个叫sleep,大家都没有代立是吧。哎,这个大家级别一样的这种的,你相互之间呢,诶你愿意调我,我调你都可以啊,但是这种有在这个有一个没有这个级别不一样,哎不一样的话呢,你得这样啊,先创建对象是吧。这呢,你得得创建谁呀,哎,零二他的对象。零二啊,这个叫E12吧。诶,这不就造一个他的对象,然后呢,通过这个对象咱们再去调这个叫method。你也可以理解成呢,这个有点像我们那会儿写的person,这个呢相当于person test一样。哎,先得照你这个方法所在类的对象啊去调啊。
14:03
好,那么调这个的时候呢,我们就直接打印效果了。哎,这不就出来了。十行八列是吧。那这样啊。嗯,这块大家可能稍微的有一点懵哈,这个你先,呃,你要是这样,你感觉说确实有点接受不了,不行你就先这么着。对,就是因为这块有static的原因啊,你要这块感觉不熟,你就先这样。看啊E02关于它的一个测试。诶,然后呢,我在这个里边呢,光写方法这个测试的代码呢,我拿走。我放到这儿。哎,这个呢,你是不是就感觉挺舒服了。因为跟咱们前面这个套路不就都一样了吗。这样啊。诶,然后呢,再回到我们这个练习这块,再写第二个方法。说呢?打印一个十乘八的星形的矩型之外呢,再计算该矩形的面积,并作为方法的返回值。
15:00
哎,这提到返回了啊,所以呢,我们其实跟它有点像啊。在这个基础上,我们叫METHOD2。诶,打印的同时再返回。十乘以二,所以这个位置。是吧?诶做一个返回接收啊,就是这块有返回类型里边呢,你得搭配一个return。这个完事了吧。哎,可以了啊好,然后呢,回到我们这个测试这个层面,哎,比如第一个我就注释掉了,哎接着e12.me02。啊哎,麦二啊,这个呢,我们在调用它的时候呢,先呢也会打印一个新型的句型,然后返回的这个值呢,我们,诶接收一下啊。诶,比如叫面积这块,你去打印说,诶面积为。An area。哎,这样呢就可以了。来,我们做一个run啊。好,这个呢,就是我们前面打印这个效果的事儿,最后呢是返回值,我们这儿呢做了一个接收,诶没问题啊。
16:05
啊,这是我们的第二个方法,诶第三个。说编写一个叫METHOD3,提供了两个参数,哎,这提到行参了,说呢在这里边呢,打印M乘N的星形矩型,然后呢,再计算该矩型的面积,再返回OK。这个呢,就体现了我们有参数的这样一个事实了。Public,而且提到有返回。METHOD3。那么两个参数呢,一个是M。啊,一个人。哎,为什么提供它呢?因为我们要打印的这个新型的句型呢,长和宽不确定了。对,不是写死的啦,是吧。OK啊,其实我们也可以呢,就把它直接拿过来,把这个位置改成M是吧。哎,这个呢是N,诶,然后把这个再改一下。NM乘以N,这个是不是就可以了?诶没问题啊好,那这个呢,就体现了我们什么时候需要这个行参了,就是里边呢,有不确定的信息的时候,你就提供行参。
17:09
就可以了啊。好,回过来。啊,咱把这个呢也注释一下。嗯,E12.2调me的这个三。这呢,我们来一个,比如说嗯三再来一个诶八。哎,这样啊啊,那这时候调完以后的话呢,里边会做一个输出,还返回一个值的,咱们这儿也接收一下。这样是吧。哎,说面积为诶加上艾瑞一诶就妥了。来右键。哎,这个出来了啊,三行八列,然后面积324,哎,就可以了啊。行这块大家看看有没有什么问题。哎,体会一下啊,哎,就是来练这个方法的。主要呢,大家关于一个方法啊,就关注一下这个犯罪类型这块,还有这个刑三这块,刚开始写的时候呢,小心一点。
18:06
啊,一旦呢,熟悉以后呢,以后大家再去定义方法,随着我们这个题目呢,越来越复杂,以后的重心都在方法体。接着我们来看这个练习三啊,首先来看这个需求,这个需求的话呢,写的非常简单,所以呢,留给我们发挥的空间呢就比较大,诶进而的话呢,大家在设计这个方法的时候呢,确实呢有的就开始发挥了,诶我们来看看这里边呢,在设计这个求面积的方法的时候呢,诶怎么设计是比较合理的。诶这句话呢,这样说的,说利用面向对象的变成思想,设计类circle计算圆的面积,诶一提到面向对象变成思想了,咱们昨天也提到了,其实就是一种设计程序的一种,呃思路是吧,诶这种思路呢,在面向对象来看的话呢,就是我们要找呃设计这个解决这个问题的话呢,它的主体。那主体的话呢,我们其实体现的就是个对象了,但是呢对象得先有类,所以呢我们就找这个过程当中的类是谁啊,其实呢写的非常明确,就是circle,所以呢我们接着呢再去设计这个circle里边的属性和方法,然后完成这个功能就OK了。
19:05
好,那这块呢,自然而然呢,我们就首先创建一个类呢,就叫做circle。啊,这个不用多说,就是圆的意思了。好,那么对于圆来讲呢,我们要考虑它内部的属性和方法。哎,那其实这里边儿呢,非常明确啊,我们需要呢,计算圆的面积。啊,那这时候呢,就提到了一个词叫做面积,那么这个面积的话呢,我们适合定义成是个属性还是说怎么样呢。诶推形成这个方法是吧,诶所以这块呢,属性呢要想清楚哈,这个我们定义这个面积作为一个属性不太合适啊,其实呢,这个面积大家首先呢也想到了,就是我们上中学学的是吧。3.14乘以。嗯,R平方是吧?对,这是求面积的一个公式的啊,哎,像这呢,是一个具体的公式啊,一个运算了,不妨呢,我们就放到方法当中了,在这个方法里边呢,会涉及到有一个R是吧。哎,这个呢叫半径,哎,那这个半径呢,我们适合给大家生命成是一个属性吗。
20:04
是可以的是吧,哎,当然也有同学说说我不想设置成属性,这个咱们一会儿说,哎,咱们目前想到的其实啊适合设置为是一个属性啊,那这个属性的话呢,可以为一个浮点型,所以我就写成double了,哎不妨呢,我就叫做readus啊,就称为呢叫半径。好,这个呢,我们就写好了啊,它呢,作为我们这个圆的一个属性。其实是合理的啊,就好比是里边有一个name一样。OK啊,我们也可以通过不同的半径呢,来去区分不同的圆的对象啊,也是OK的啊。好,那么接下来的话呢,我们可以呢,去定一个求面积的方法,那这道题呢,就是因为它写的非常的简洁,所以呢,求面积的方法呢,没有给我们指出来,到底要不要返回值的问题。哎,所以这个题呢,其实都可以。啊都可以啊,如果说这个位置呢,我们不想返回,我就写成个VO了。写成Y的求面积啊,比如我这个叫find area啊,就是求面积的意思啊。
21:02
好,那么求面积呢,在这里边,那我们就写成了,就是直接哈,哎3.14哎乘以哎,Radius,再乘以一个哎,Readdius。抽完以后的话呢,把这个结果直接呢,就在内部呢打印了。哎,这个呢,我们就设计完了。这个呢,是我没有要这个返回值。啊,那么有的同学呢,可能说,哎,我不是这样设计的啊,哎,我是这样写的,大家你看看这个写法对不对啊。也叫find area,或者加个一吧先。诶,我这个在设计时候呢,是我们先过了,然后这个参数到底要不要。人家说哎,这个球面你不得来一个呃半径吗?哎,就写了一个参数啊。然后在里边计算的时候呢,首先说呀,你既然写参数了,你就得用,你不用呢,就没必要了,是吧,所以他就这样写的。那么看看这两个的区别。
22:02
哎。是吧,看看这个区别,好,这个我们还暂时先不做评论,我接着再来啊。呃,这两个方法呢,放到这儿了,然后接下来的话呢,我们其实呢,这个题目呢,就关于这个类的设计啊,就差不多了啊,下边就是我们做测试的问题了。哎,我这呢,就circle的一个test了啊,没有方法进来,诶首先呢,我们创建一个circle的对象。L加CE吧。诶对象呢,创建比较清晰啊,然后接下来的话呢,我们通过这个C呢,首先咱们调属性给半径呢,附一个值啊,那就是点readus了,不妨呢,比如我就写个2.3。好,那这个写完之后呢,如果按照我们第一个方法这个思路来,那我就是C1咱去调find area,然后呢,我这块呢,因为里边没有啊,里边已经有输出了是吧。所以我直接呢,这样就可以了。哎,这有它的一个面积。啊,这个里边要是缺这个,你说面积为这个,你可以在这再补一个也行啊,比如在这儿。哎,面积为啊,哎,这样一下啊,下边这个呢,也同样的道理。
23:04
哎,这个都是小事啊。好回过来,呃,这个时候呢,我们去调发瑞呢,很自然然的,哎,我们去调了一个方法,那就是3.14乘以2.3,再乘以2.3就出来了。哎,大家可能会看这个数据好像有点奇怪哈,这个呢,就是它精度的问题了。啊,这个咱们暂且就先这样理解就可以了啊好,你也可以呢,调我们ma里边有run的方法啊,来一个四舍五入也行。哎,这个我就不说了啊。好,那这个呢,我们就拉回来,那这个是调的find,那调下边这个方法看一眼。哎,3.1是吧。那你要调下边的方法的时候呢,哎,你必须要传入一个实参了。那现在问题就是。你要是认为下边这个对,那这个传首先传多少。首先的话呢,你看它呢,既然是写成个变量了,就用户有可能传任何一个W型的值是吧,我可能传的是2.3,我也可能不是。
24:02
我就写一个3.2。代问,哎,我传的就是3.2,那现在求的面积是不是就不太对了?这时候我们相当于计算的就是拿3.14乘以3.2,再乘以3.2算出来的。哎,那显然呢,这时候就不是这个诶圆的面积了。这个数不对。他说诶,那他写3.2是不对,那我们不让他写3.2,我就让他写的2.3。呃,或者你换句话说呢,你只能让他写2.3。对吧,他一旦写别的不就不对吗。那既然只能写2.3,那就意味着确定性嘛。既然意味着确定性,那你干嘛还写一个呢?诶,所以这个位置呢,诶,大家应该能够想到啊,我们在求面积的时候呢,在这道题目当中,我们已经有半径作为一个属性出现了,然后面积当中作为一个方法可以调属性,直接就求面积就完了,这个位置就不要再去传了。所以这个写法呢,是错误的。
25:00
当然有的同学会想说,那我这个半径,我干脆我就不要了。我这个位置呢,是不是就没有了,我直接就求面积,诶这样写。是吧,哎说呢,我这块这块我过来啊,就没有这回事儿了啊,这个呢,我就全2.3,这个呢,就作为我们这个圆的半径出现了,诶首先呢,从结果上来讲呢。也行是吧。啊,确实是个面积哈,但是这时候呢,你这个圆呢。多少我们觉得说你把这个2.3呢,说看成是一个半径呢。诶,这是一个局部变量了啊,似乎呢,差点意思。啊,你像一个圆,这个圆呢,有个半径,诶,其实很自然而然的,我们会想到它应该作为一个属性。啊,就是相当于它的这个作用域范围可能就比较大一些啊,你只让他做一个面积呢,好像差点意思,或者换句话说呢,我们可能还要求圆的周长呢。那周长的时候呢,你又定义成一个行参了,这好像不太合适是吧,或者换句话说,你这个写2.3这块又写个别的了,那不行,所以呢,我们应该让他做一个属性,你可以在求面积求周长的方法里边都去用。
26:01
比较合理,所以呢,这个我们是应该打开的。然后这个呢是错误的啊。哎,所以这个呢,大家要把握好,哎,它呢是错误的,这样的方式设计是可以的。啊,那么可能还有同学说,诶说我是这样写的哈,这么着public啊,然后这个方法呢,我们比如叫find area,那叫二吧。诶,这个行参的话呢,也没写,但是他这块呢,写的是一个有返回值的。啊,那就是这个面积了,那就写成个double了。哎,这样的啊,然后在这里边呢,就return一下,哎,3.14乘以瑞,又乘以瑞。哎,那么问这种写法可不可以?对啊,诶在咱们这道题目当中呢,他没有提说要不要有返回,所以说呢这块呢,关于返回值这块,大家可以灵活一点去处理,这种方式和这种方式都可以啊,所以这块我们说呢叫诶货是吧,那写成这样。
27:01
哎,你要写成这样的话呢,那就回到这儿来,那就需要我们自己这块啊,这个答案错了,我就直接把它就删了啊。哎,你就通过这个C点叫find area呢,叫它,哎,只不过这时候它得到的是一个数值,这个数值的话呢,我们再去打印一下。啊,你可以自己在这儿写上一个叫呃,面积为。哎,这么着。哎,这两个思路呢都是一样的,结果呢也是一样的。啊,那结果都是一样的。那那这个半径呢,就是纯粹做一个属性出现啊,是合理的。好,那么这道问题呢,咱们就讲完了啊,哎,大家呢,稍微的体会一下关于反殖类型,关于行参啊这块的理解。OK,这就过了,咱们接着来看下一道题啊。看这道题。诶,这道题的话呢,就把我们前面讲的数组的一些内容啊给他就诶。搭在一起了啊,那呢,根据上一章数组当中的常见算法的操作,哎,说这里边儿呢,我们可以制定一个操作int类型数组的工具类啊,涉及到方法,就我们前面讲到的一些相关算法。
28:05
我们看看怎么去处理啊,哎,这里边呢,让我们自定义一个工具类,那我们就去new一个,不妨呢,我叫my ari。就要这个类了。他要用在这个类里边呢去,哎涉及到的方法呢,有这样的一些。嗯,好,有这样一些方法,哎,咱们先把这个呃声明我先写出来啊,这个呢叫求的最大值。诶,或者我我这样,我就先先写这一个啊,咱们先把这个方法写出来,然后我给大家说一下这个文档注释的事儿啊。什么意思,你看啊,我先写一个啊,说这块呢,我们求这个int型数组的一个最大值,那你说要不要返回值。肯定得要了是吧,这个步伐我们就要get max了,要不要参数呢?是可以要还是可以,还是说必须要啊。必须得要啊。哎,因为你得告诉我是求哪一个数组的元素的最大值吧。
29:03
你不能把这个数字写里边,写里边,这不写死了吗?以后改不了了是吧?诶所以必须要传进来才行啊好,那这块呢,我们相应的就给他去返回一个具体的值,我就先不让他报错哈,然后这块的话呢,大家你看啊,以后我们在写程序的时候呢,像这种方法啊,咱们前边呢就别写这种。就真正在做项目的时候啊,写的就都不是这个叫单行注释或者多行注释的,而是一个文档注释。啊,一个斜线两个斜看我一回车。它会自动的呢,给我们加上你这里边儿的行参呀,包括反数类型啊,诶,它会给我们都补上的。哎,你在上面呢,就写这个方法的一个作用啊,我们叫获取啊int型这个数组的最大值啊,然后这个呢,就是啊,要获取最大值的这个数组。然后这个呢,返回值呢,就是呃,数组的最大值。哎,就这意思啊,哎,那么写它的好处是什么呢?写它好处呢,首先看光标要往这一放。
30:02
你会发现呢,这块有提示。这个提示的信息就是你写的这个信息。啊,你要从这个角度出发的话呢,你看我们刚才这块写的这个。这是输出语句是吧,你把光标放在这个print line这块呢,也会有输出,也会有提示信息。诶,你这块我按住CTRL键,我点一下啊,诶上面这块呢,其实你会发现呢,我们在API里边看到的,这都是文档主持。他写的这个信息,哎,我们在这块呢,之所以能够看得到,就是因为他在定义这个方法的时候呢,写文档注释了。只不过呢,你好像看不太不愿意看是吧,英文的哈,诶所以咱们以后呢,自己写一个方法的时候呢,你这方法干啥用的呀?诶你自己写上这个注释信息。啊,写完重置信息以后啊,咱们再稍微的。跳脱出来啊,我们一会儿不是得做测试吗。瑞的一个测试。啊,在这你看没方法过来啊,哎,首先呢,咱们去创建一个叫myri。给他吧。
31:01
哎,迈瑞斯好造好以后的话呢,我们通过它呢,这不去调这个叫get max的这个方法吗。哎,提前呢,你把这个数组呢,我们造出来一个哈。求这个数组的这个最大值,哎,这我就随机的咱们整几个数啊。可以了,然后把这个AR呢,这是往这一扔,那这不就调取了,调取以后呢,你看光标你往这一放。诶这块你看就提示我们这个信息了。哎,这个呢,就是我们这儿写的是文档注释,所以呢就能够看。哎,就这个意思啊。行,这个咱们一会儿再详细的说这个测试的细节了,好那么拉回来啊,那么这块呢,就是我们这个具体的,你看里边怎么去写,咱们先把整个这个。方法呢,这个先弄出来啊,接着呢,我们public啊,求一个最小值。啊,这样的是吧,哎,我先让他不报错啊。接着呢,求这个总和。哎,最后呢,你也返回给我get一个some。
32:02
哎,印在前的数组啊,这样啊。哎,接着呢,去求一下这个数组的这个平均值啊average。哎,这样啊。嗯,这个为了让他不报错呢,咱们可以先return个零。OK啊。好接着再看啊,说这个便利数组,这个我们稍微这样盯一下。哎,便利数组变力数组的话呢,这就word了。哎,我们叫一个print吧,哎,我想打印一下,哎,这个数组,把这里边每个元素呢,都给我输出出来。呃,这个复制数组。哎,我调完这个方法之后呢,呃,你返回一个我传入的这个数组的一个复制品,那返回值类型怎么写。哎,是不是得这样写了。诶,我叫做copy啊。诶,就是你传进来一个数组,我返回呢,跟你类型一样的一个复制品。
33:02
这个我写return return。闹了,因为你不是引用类型的吗。嗯,好。然后这个叫复制,然后数组的反转。哎哎,这个要不要返回值。不用了啊,就是你反转完以后呢,直接你那个数组就反转了是吧,Reverse啊。哎,这叫反转。呃,数组的排序。嗯,排序是不是也是Y的。哎,Sort一下啊。哎,这么着啊,还有一个这个查找。诶查找的话呢,得用一下是吧,诶查找的话呢,得返回你告诉我那个索引呗。这个咱们叫search是吧。所以的话呢,关键就是你这块想用什么样的查找了。呃,你要二分法查找呢,那就要求高一点,速度得有序是吧,你要说线性查找那那就都可以了。那这个咱们用一个其实都可以啊,咱用线性的吧。
34:01
哎,线性的一个search。哎,这个我们叫呃,Int型的一个,诶数组。哎,这么着啊,好,暂且的话呢,我们先return个零,OK,哎,就是这样的一些方法。然后呢,下边这个呢,其实正常来讲,每一个呢,咱们都应该给它加一个文档注释,诶说明一下是吧,这个呢,就是获取这个的最小值。哎,最小值这个呢,就是要获取最小值的这个数组。啊,这个呢,就是获取的最速度的这个最小值。哎,这个最小值是吧?行,下边这个呢,我就诶省略了哈,诶大家知道的意思,呃,就是要不我这写需要花一些时间了,诶大家每一个呢都应该啊,就是标准来讲,以后写项目的时候呢,都这样来处理就比较规范一些啊,包括呢,我们这个类上面呢,咱们前面讲idea配置的时候呢,是不是也都加了这样的声明了,在光标往这一放,这其实也能够体现出来相关的这个信息啊。
35:03
OK了,嗯,那接下来怎么做呢?那咱们就参照一下之前写的这个题目了,找到这儿找到这儿。这个咱们常见算法啊,这个做的相关的一个需求啊,其实我们就可以呢,相应的粘一粘了啊。求这个最大值的,哎,我就从这儿到这儿CTRLC一下。哎,我先这么着啊,关掉其他的。哎,再把刚才的这个打开是吧,好,这块CTRLV翻过来。来看一看啊,这呢正好是应对型的数组,而且这个数组名还都一样啊,这个这个量,那最后呢,直接return一下这个。Max。是不是就可以了。没问题吧?嗯,好,接着啊,第二个求最小值,从这到这CTRLC。哎,粘过来。哎,Return一下mean。哎,没问题。好,接着啊。哎,要都这样写代码就挺爽的是吧。啊,来直接粘一下啊。
36:00
啊,Return一下这个some。嗯,好,接着呢就要求这个平均值啊,平均值这块呢,我们直接呢,是上面有个变量萨姆除以它了,那这块呢怎么处理。对方法里边可以调方法是吧,直接呢,我们就调一下上面这叫get sum这个方法。哎,同样的把你这个AR呢,哎,放到我们这个,诶方法的这个形态这个位置,然后呢,你返回的不就是一个总和吗?哎总和呢,再去除以一下。a2.les。哎,这就搞定了啊。好,这个呢叫便利。哎,便利这块好像我们没有刻意的去写诶。没有啊,我这没可以的去写,那咱自己写一个吧。呃,这个便利的话呢,呃,我希望呢,打印出来是这样一个效果吧,比如说啊,这个咱们调俄瑞点to string的时候呢,它不也是一个中号啊,一个元素俩元素仨元素,这样是吧?呃,咱们也打印一个这样的效果吧。那就首先呢,先。输出一个中括号是吧。哎,然后最后的时候呢,呃,也是输出一个中号。
37:03
哎,这样是吧,哎,中间这块呢,我们就是便利这些元素,注意中间有逗号,最后一个呢,不要逗号了。哎,怎么处理啊,想想。啊。这个怎么去遍历啊,这个呢,我们看源码的时候呢,它使用了这个字符串相关的一个类啊,String builder啊,咱就不那样做了,咱就直接在这儿就输出了啊。嗯,这块的话呢,第一个元素呢,其实就直接打,或者说呢,只有一个元素的时候呢,不会有逗号的事儿哈。呃,如果要多元素的话呢,我这么着看啊,你要多一个元素,比如第二元素,我就让第二元素跟逗号呢,它俩算成一起的。第三的话呢,就是这样是算一期的。所以我这样处理啊,说如果I呢,等等于零,就是第一个元素。我这块就直接光打印啊,你这个ari ari吧。哎,你是零的时候啊,然后else。L你就不是零,不是零的时候呢,我们也不要换行上来呢,先逗号一下。
38:03
哎,再加上这个ari,看这行不行。哎,先出来个它第一个元素呢,就直接打出来,假设就一个封起来,哎,有第二个逗号一下,再把第二个打出来,然后再封起来。没问题是吧。这就是print啊。好,接着copy copy呢就要复制了,嗯,这个我们再上去啊。Copy。复制复制,我们写写哪儿呢?啊,在这块练的是吧。这块练,但是咱们没刻意的这块去写了一个啊,那咱们自己在这写一下啊。在这里边儿呢,首先既然呢,你是个复制,我们得造一个新的数组。哎,新的数组先拗一个int型的长度呢,跟你的一样。来,放心玩一下啊,安。A2点,哎,L啊。诶,这个位置呢,你写成new a一样啊。它俩的长度因为是一样的。
39:00
哎,你的AR找到第二个元素,拿原有的这个I呢,去做一个赋值就可以了。哎,循环完以后呢,我们这个位置呢,去返回这个new AR就妥了。没问题吧?嗯,OK的啊行,这个咱们前面其实都写过这样的代码了,诶下边这个呢叫做reverse啊,这个呢叫反转,反转咱们练过了。在这练的啊。诶方的方式一方式二,那那咱们就把方式二这个呢,CTRLC拿过来吧。稍微的看一眼啊,这个也叫AR,然后呢,这块做一个反转交换。诶,完事了。不用返回,哎,本身呢,就已经把它给改了。嗯,好的啊。然后再来啊,这个呢叫salt排序。造的排序啊,那假设呢,就用咱们这个冒泡吧。啊,那同学说说这个冒泡直接我这样行不行,瑞点调调一个salt,然后把这AR扔进去看,挺简单是吧。嗯,这个呢,有点投机取巧了哈,现在让自定义呢,你里边就包了一个现成的是吧。
40:03
啊,这个这个不太行啊,你说你要这样讲的话呢,你自己好像也能造一部手机是吧。买一部手机,然后呢,贴上你的标签就行了是吧。嗯,贴牌了成了啊好这个呢,我们自己来,自己来的话呢,就找咱们这个排序哈。哎,冒泡在这儿呢。嗯,咱们在这儿啊,从这到这呗,CTRLC。哎,粘过来。哎,娄眼这不是核心的,我们冒号排序的两行这个逻辑啊,哎,整个呢,结束以后这个顺序呢,就排好了。没问题啊。然后接着啊,这个呢叫呃,顺序查找,或者叫线性查找。在这儿呢?哎,线性查找方式一方式二,哎,我这还写了两种方式呢,是吧。啊,这个主要区别呢,就是我们这个I的这个问题了。啊,这个我们就把它拿过来稍微的动一动啊,回过来找到这儿啊,CTRLV,诶这个方法呢,我们稍微的调一下得。
41:02
哎,习惯性的,我就还放在里边了。啊,这个呢,叫AR1。哦,对,这个呢,参数咱们是不是设置少了。嗯,对的啊。这块呢,我们要从这个数组当中找找什么没告诉我呀,是吧,呃,Int型的一个target。哎,目标的元素,哎出现了啊,这个分号去一下,哎,从零开始到结尾,然后呢,A加加,一旦呢,找到了,找到了这个我们就不要这样处理了,哎,Break也不要了,直接呢就return。I是不是就行了?返回这个索引吗?对吧,好,那么要是没找到呢。哎,只要呢,执行到这儿了。来说下,只要代码执行到此位置,一定是没找到。
42:00
呃,因为呢,诶我们上面呢,呃,执行到这儿,如果你要没执行到这儿,他在这块结束了,一定是执行return出去了啊。诶,那你要是没有指令这块出去,那肯定是这块没满足走到这儿了,所以你肯定是没找到,没找到呢,现在呢,还必须让我们去返回一个int值,那咱们只能先return一个负一吧。哎,就这样,哎,所以这个方法呢,我们可以写一个把它,哎写一个文档注释说明一下啊,这个呢,我们叫来使用啊,线性查找。啊,然后呢,现在查找的这个算法,哎,查找。哎,指定的元素啊。那这个AR呢,就是我们在。等待的待啊,查找的这个数组,这个呢,就是要查找的元素。哎,返回值呢,就是呃,它给的元素。哎,在我们这个AR,哎,数组中的索引位置。哎,所以位置,然后呢,补充一句,哎,弱。
43:01
呃,未找到。哎则哎,返回对负一。哎,这样呢,回头你调到这个方法呢,你发现诶这个怎么返回负一了呢,你看说明哦,它提示我了没找到找返回负一,哎就比较清晰了啊。好,这个制作以负一呢,就是我们数组的,呃,因为数组的首元素呢是角幺零啊,那我们就取它的前一个负一就行了。你说我就取负二都行,只要是负数都算是没找到。写完了。啊,这呢,我们就处理完了啊,这块我们就把它收起来了。好,那么接着啊,回过来这个洗完以后的话呢,我们就可以呢,在另外的这里边儿呢,做测试了。哎,这个你看我写完以后呢,我这样啊,我CTRL f12一下这呢,就刚才这个类呢,我们写的这样的一些方法。哎,我盯一下啊,这不就能知道都有哪些了哈,哎,回到这个测试这块啊,你就可以呢一个一个呢去做这个测试了。好,这个咱们就挑着来吧。圈出来啊,数字呢长这样,嗯,最大最小平均总和,嗯,先整一个,比如叫求最大值吧。
44:07
哎,as.get一个max,哎,我想获取一下我这个数组中元素的最大值啊,直接我就打印了啊。在这个位置写一下。最大值为。哎,这不就搞定了吗?啊,然后呢,再来一个,咱们求一个平均吧。哎,平均值啊。平均值为,啊,这个我们就get一个average。哎,掉这个了就。啊行,先看看这两个事儿啊,Run一下。哎,这个呢,就求出来了。最大值啊,看这啊778最小值幺诶。啊,平均值啊平均值OK,没问题啊好,然后这块呢,我们再去做一个叫便利。哎,便利啊。点,我们叫print。把这个AR呢扔进去。
45:00
哎,看一下。哎,你看这样的,哎,跟我们这个顺序呢,稍微的对比一下。哎,挺好是吧。哎,这呢叫便利了,好,接下来我们做一个查找吧。哎,这个我们叫linear search啊,AR往里一扔,我查一下这个24吧。诶返回呢,对应的这个索引啊,或者这块你也可以这样处理啊。先呢得到这个索引。对index是吧,然后你判断说,如果这个index呢,它是大于。大于等于零啊。哎,这根弦呢,就找到了是吧。找到了啊,位置为。哎,加上index。然后呢,来一个else。哎,就是未找到啊。诶,这样就可以了,好24啊在里边呢。诶,Run一下。在这里我们就找到了,哎,缩阴位置呢,是无啊,没问题啊,好,下边我们做一个排序。
46:07
哎,排序这时候呢,诶,拿着我们自定义的这个啊,调一个扫的方法。哎,把我们的AR呢,往里边一扔。诶,它就自动的调我们这里边儿的这个操作了,诶这就给我们就排好了,就啊好,那么排好以后的话呢,我们,诶注意不需要返回了,直接呢,把这个数组就已经排好去了,我们再做一个便利。看一下。哎。哎,这时候呢,我们就排好顺序了。好,那其他的我就不测了,包括rewards啊等等啊就就算了,那这个呢,就是我们关于这个自定义这个工具类的一个。哎,实现啊。哎,其实呢,这个A瑞呢,类似于我们这样的方式去做的。哎,它比我们设计的功能多到哪儿了呢?咱们这里边儿呢,只涉及到了int型的数组。啊,它这块呢,涉及到的这个数组呢,就比较丰富一些是吧,Ctrl n AR。
47:02
然后呢,点这个叫all places,哎,点进来。啊,然后CTRL呢F12,诶这块你会发现呢,诶它可以首先方法比咱多哈,诶ES它呢针对于好多种类型的哎数组都可以做equals的判断,包括其他的这个feel啊。是吧,这个salt呀,它针对的类型呢比较丰富,咱们这儿呢,只考虑了int类型。哎,但至少我们知道这个类呢,其实也没啥大不了的啊,只不过呢,就是API给我们提供好的,这呢是我们自己写的。而已啊。那这个题目呢,我们就说到这儿啊。
我来说两句