00:00
OK啊,那么在前一天的最后的话呢,我们还是谈到这个方法啊,方法这块呢,我们说到了啊,在一个类当中最重要的呢,其实就是一个方法了,所以呢,我们在前面呢,讲到了这个类的这个成员啊叫属性方法之后呢,我们专门呢又呃提了一个小的这个专题来讲一下这个方法这个事儿,方法这块的话呢,我们单独的挑出来是有这四个事儿啊,这个事儿呢,第一个哎方法的重载,那你得知道呢,诶怎么叫方法重载了。啊,这块的一个主要问题呢,其实是说呢,我们如何来判定,诶我在这个这个写完这个代码之后啊,编译器呢,调的是指定的哪一个方法,这个呢,其实是我们讲这个重载的一个主要的意义啊,然后第二个的话呢,我们就谈了谈,说叫可变个数形态的方法,这是5.0的时候的一个新特性。啊,其实这块呢,也也没啥是吧,也不用想出那么重了,只不过呢,就是以前的时候,我们是写成一个数组的方式表示呢,你可以传出传入一个容器,这个容器里边呢,可能有呃,零个,一个或多个这样的元素,说现在话呢,你不用这么复杂了啊,不用每次都扭一个了,现在你只需要呢,这样的一种方式去传入呢,你不确定多的这个变量就可以了。
01:09
啊,其实也不复杂啊,好,那么接下来的话呢,我们谈一个重要的内容,叫方法的值传递机制。那这个的话呢,在我们使用方法的时候呢,这个相当于是一定会去使用的,是一个重点,也是贯穿大家呢Java编程的始终。好,那我们这块来看一看所谓的职权利机制是怎么回事啊,呃,那么关于这个话呢,我这块写了一个复习,呃,说明呢,我们在之前啊,已经谈过这样问题了。只不过呢,现在呢,我们把它呢明确一下啊呃,这块呢,提到了方法的值传递机制,其实呢,是针对于变量赋值这样的一个操作的,那么关于变量的赋值啊,对于方法来讲呢,我们说呢,主要方法中的变量有两种情形啊,一种呢,就是在方法内声明的变量啊,我们叫做这个普通的这种局部变量了,那么另外一种呢,就是方法的这个行参的位置啊。
02:01
声明了变量了,然后我们在调方法的时候呢,给他传具体的实材。哎,这个呢也是一种场景,所以呢,咱们就分两种情况呢来说。那么这两种情况里边呢,第一种啊,其实咱们比较早的时候呢,就遇到过了,呃,在讲数组的候呢,其实就算是呢,呃,遇到了挺多的这个场景了,只不过呢,这个行餐这块呢,是我们讲完方法以后才明确的一个概念,所以我们一会儿呢再说它那针对于上面这种情况。方法内声明的局部变量,他们的赋值的一个情况,诶这块呢,我给大家呢,举例子来说明啊,好,那咱们呢,直接就定位这个零三啊叫value transfer,这就是值传递机制啊,直传递的意思,那我们写完这个代码之后呢,我们再去看一看所谓的直传递机制是什么意思啊。好,那么首先呢,咱们创建一个Java class,诶,我就称为呢叫value啊。这个transfer是吧,哎,它的一个测试OK。
03:00
好整一个main方法啊,那我们这块呢,就在这个main方法当中呢,去体会啊,这里边儿呢,我们声明的变量啊,自然而然也就叫做局部变量了,那么局部变量呢,我们还可以把它再细分一下。啊,其实就是涉及到变量这个分类了啊,那如果说呢,我们是基本数据类型的。哎,局部变量是吧,我们看看怎么回事,然后呢,我们再看看引用类型的啊。哎,基本数据类型,哎的啊,局部变量。好了,那这块我就直接来举例子了啊,比如说这个M呢,这个值呢是一个十,然后呢,我再印那个N,这个N呢,哎,我就拿这个M呢去赋值看,这就是咱们所谓的这个变量,这种赋值的这个操作了,主要咱们看的就是这一行代码啊。那么这样代码执行完以后呢,我们去打印一下,呃,这里边儿这个M和N的话呢,这个其实所有同学应该都是清楚的。哎,加上我们这个M是吧,哎,逗号N。
04:01
这个应该都清楚是吧。都是十倍。对啊。好,都是十,这没问题,这个大家都是清楚的,好那么接下来啊,你看呃,我现在呢,拿着这个M吧,比如说我让他呢,执行那个加加的操作了。然后接下来的话呢,我们再打印一下M和N,主要呢,这里边儿我们想关注的就是N是多少是吧。N是多少?N是十还是11呢?十对,这个呢,是我们要特别明确的N是十,哎,那么这里边儿呢,我们想强调就是你把这个M的值呢,给了N了,然后M的这个值呢变了是吧。说N的值呢,你发现。没有变是吧。是这意思吧?诶,那这时候呢,大家去想想,诶这里是怎么去理解的啊,这是一个场景,一会儿呢,咱们去做这个总结啊好,那么第二种情况的话呢,我们来考虑考虑叫引用数据类型的局部变量。
05:01
哎,这块呢,大家得注意听了啊,虽然说呢是一个复习了啊,但是这块得把你一些思路呢得捋清楚,那引用数据类型的局部变量,那我们讲过的类型一个呢是数组。啊,一个呢,是我们说的,呃,对象是吧,类对象啊这样的一个概念了,好,那首先呢,我们以这个数组来去说吧。诶,数组的话呢,你看我首先呢,我就以int类型的数组为例,这呢是一个A1。又一个in的形的数组,不妨呢,这个值就12345啊这样的几个变量了。好,那么接下来的话呢,我再去说明一个啊,数组二,这个数组二呢,我们就拿A21呢,去做了一个赋值。啊,那么这时候你要想清楚啊,它这个复制操作复的是什么。地质直达是吧,诶内存当中目前呢,是长什么样子,脑海当中应该有数啊。那么接下来的话呢,我们通过这个,呃,A1也好,AR2也好啊,我呢去修改其中某一个元素的值,比如说我就把第一个元素改成十了。
06:02
啊,那么现在的问题就是说,诶,我们去打印另外这个变量的。哎,修改的这个位置的这个元素,问这个时候是几。哎,这个时候大家诶都知道是十的,相当于呢,我们通过一个变量改的话呢,另外这个变量再找的元素就也改了是吧。哎,对的啊,来转一下。诶,你发现的,你看确实如此啊。哎,那这块呢,你要捋一捋,诶怎么上边这个就没改是吧?诶下边这个我们改就改成了。就是稍微的宏观上感性上来理解,似乎有点这样的特征是吧,你看你这个改这个N呢,就没变,然后你这个改的话呢,呃,另外这个呢,它就调出它就变了是吧。哎,这个稍微想一下,这个呢,相当于是我们的那第一种情况啊,这个数组。哎,数组类型的,然后接下来我们看一看,这个叫类类型的啊,或者叫对象类型的。好,那下边我们就得有这个具体的这个对象了啊呃,那不妨呢,我就在当前咱们这个代码里边啊,我就在下边了啊,直接呢,再去声明一个类啊,比如说这个类呢,叫做order类。
07:10
哎,叫做奥特类啊,奥特类里边呢,我们印一个。变量啊,我叫ID吧。哎,这个应该都能看懂啊好,然后接着我们在这的时候呢,我声明一个order类型的叫ORDER1,哎,我去new一个order。你完了啊,另外以后的话呢,我这个AL1呢,我去调一下这个al ID,哎,通过对象调属性,我们都已经很熟了啊,我呢复制为1001。哎,复制好了啊,然后接下来的话呢,我们再声明一个叫ORDER2,然后呢,拿这个ORDER1呢去赋值。OK啊好,换完这以后的话呢,诶不妨我就还拿OUT2呢啊,我去调一下out ID,我改成1002。那么问题啊,你也能猜到了哈,我看一下奥一的奥ID是多少?1001还是100?对,1002来我们运行。
08:04
好,这块我看有同学可能会有点儿异议了,有啊好,这个结果呢是1002。OK啊,那么关于引用数据类型呢,咱们目前呢,就讲到了这两类,而且呢,这是呃差不多呢,算是最常见的这两类啊呃发现呢,就是相对应的,呃似乎好像都有变化似的,那么我们稍微的呃简单我这块画一个草图哈,你看第一种情况。呃,这个呢,是魅方法对应的是一个战争,呃,是一个战,战里边呢,魅方法对应的是一个战争。没问题啊好,一定要这个没方法,我们这个战争呢,就加载进来了啊,就入战了啊,然后X我就省了,然后在这里边呢,这不声明这个M。十是吧。然后N呢?注意。嗯,M的值付给NM过来的是什么?也就是说地址值,嗯,这个有地址值吗。没有啊。对,诶这块呢,也是我们要强调的基本数据类型的变量,你在加载完以后给它赋值的时候呢,它没有所谓的这个地址值质数。
09:09
基本属于定性变量啊,没有地址指数,就是存的你本身这个变量的这个数据哈。哎,那这存的是十,所以说我传的话呢。哎,就传的是屎了。可不是说整个地址,然后地址也指向这个值,那那不是啊,所以呃,基本属于定型变量,就是传递的你本身所保存的这个叫数据值。啊,这个注意啊,好,这个一旦过来之后,其实下边这个事就迎刃而解了,所以打印都是10M加加把你自己这个改成11是吧,N,那这不还是十吗。哎,所以这块呢,我写一下啊,这个我们说那叫传递的是。哎,就叫做数据值。啊,你要是个布尔类型的,那你是个true,那你就传true,是个false就传false double类型的,那就传你这个具体的带小数点那个数。
10:02
叉类型,那就穿你那个字符。哎,你存的是哪个数,我就传哪个数。注意啊好,那然后呢,我们来看这个引用类型啊。赢了想啊,其实它俩呢,呃,算是一回事哈,嗯,特点都是一样的,呃,那因为呢,它这块涉及到我们new的这个结构了,所以就得有堆了哈。啊,这是这。这是这个堆。呃,这呢,我们就以数组为例,诶,那首先呢,也是这个没方法呢,就一个战争的方式呢,这块就入战了啊,前面这个变量MN我就省略了,首先呢,这块有个AR1啊,然后它指向我们在对空间里边你的这样的一个数组。哎,这个元素呢,就12345了。然后有一个地址值,把这个地址值呢,给了我们这个A1A21。哎,那通过这个地址呢,我们就指向了对空间的这个实体。啊,12345是吧。哎,这应该没有意义是吧。那么接下来的话呢,我们把这个A2呢,又声明出来了,又一个新的变量啊,这个变量的话呢,我们是A21付过来的。
11:05
对,这就是我们要强调的,对于引用数据类型的变量来讲,它的这个赋值操作。付过来的是。对,这是我们叫地址值了,因为引用数据类型的变量,它存的呢就是地址值。所以呢,你传的话呢,也就传递值值,哎,所以你就也指向了这个堆空间的这个数组了。啊,也指向它啊,因为你也指向它了,其实我们宏观就知道A1A2是俩变量,但是他们共同指向了对空间中的同一个数组实体。啊,你可以成为呢,它俩的地址值一样,也可以成为呢,就是它俩呢指向的是同一个,呃,这个数组实体了啊,然后继而的话呢,你通过一个变量去改这里边的元素啊,你改成十了,呃,另外这个去调肯定也是十。哎,这就我们说的这样的一种情况啊。啊,你说这挺简单的,诶先把这个基本的问题先整清楚,后续的话呢,我们有好多的题目,一做那个题目的时候呢,就怕你hold不住了。
12:07
哎,所以呢,把这个结论记住啊,这个位置我们说它。哎,传递的是。地址值是吧,哎,这个注意啊。好,然后呢,接着我们来看这个对象这个类型啊,这块呢,其实跟上边这块呢,就类似了啊,咱们就快速的这样过一下啊好,那首先这块呢,我们在战里边,这也是一个main方法,对应的一个战争进来,然后ORDER1是吧,哎,有简写成O1了,哎在堆里边呢,你就用了一个order,诶order呢,下边这块我们有个属性叫order ID是吧。啊,这ID我就简写了啊。诶ID,然后呢,这有个地址值,然后把地值呢给了我们的OE,然后OE呢就指过来。好,然后呢,我们下来,下边通过这个对象呢,调这个属性复制为1001。诶没问题,然后同样的道理,2.1付给2.2,那这个呢,就是我们现在要说的这个重点啊,还是把地址值付过来,所以呢,诶我们就也指向了堆空间这个对象试题,进而通过其中一个对象这个变量呢,去修改这个属性值,不管是A1还是A2去改哈。
13:10
总之呢,改的都是这个数据。改完之后呢,你再通过另外一个对象啊来去调这个属性呢,一定是改过的。哎,这个呢,跟我们上面这个数组呢是类似的,所以它传递的仍然是地质值。没问题是吧。呃,这个呢,就我们说的这样的一个场景啊,传递的仍然是地质值。然后这个呢,咱们就说完了,关于方法内声明的局部变量,它的一种传递的机制啊,回过来我做总结。看这啊,说对于方法内生命的局部变量来说啊,下边我得分两种情况了说,如果是基本数据类型的变量,则。哎,将此变量保存的数据值吧。是不是传递出去是吧。
14:02
这个生命变量来讲,这个我们说如果出现应该这样说啊来说啊,如果出现这种赋值操作是吧?诶然后具体来讲你是怎么回事啊。好,然后呢,下边啊,这个咱们就对照着啊,这样你更清楚说,如果是。呃,引用数据类型的变量,则将此变量保存的。对粒子值传递出去。哎,这呢,就是我们说的这个结论。那么这个结论的话呢,其实我们呃,这个这是针对于方法内的局部变量来说的啊,针对这个行参来讲呢,也是一样的,所以这种机制呢,我们就称为啊,你就挑他俩的这个共同的这个。字是吧,是不是有个叫纸啊。诶,就是说白了啊,就是我不管你是基本数据类型也好,引用数据类型也好啊,你看我这句话就是你存的是什么。你就传什么是吧。对,你是基本税类变了,你存的就是地址数据值了,好,那你就传数据值应税据类型了,你传的存的是地址值,那你就传地址值。
15:05
所以呢,你存什么就传什么,那对应的这块呢,我们其实都叫做值了,所以呢,把这种机制咱们就称为呢叫。哎,直传递机制了。你说呢,感觉也没啥大不了的是吧,呃,其实也确实没什么大不了的啊,呃,就是叫直传的机制,你存什么就传什么啊,这个我们都成为呢,泛泛的一种直了,叫直传立机制。好,这个呢,如果你要清楚了,下边的话呢,咱们看一看,除了方法内生命的局部变量来讲,我们重点看一看参数这块啊。哎,参数这块的话呢,在传递的时候。就是你可能会跟你潜意识当中的这个想法不太一样了,但是结论一样啊。还是他。好,那么首先呢,针对于呃,参数这块传递的话呢,我们先来复习两个概念,前面我们讲方法的时候其实提到过哈,第一个呢,叫行参。啊,其实就是在定义的时候是吧。哎,我们在定义这个方法的时候呢,这不有个小括号吗?小括号里边呢,定义的变量不就要形残吗。
16:05
啊,13呢。实参,哎,其实非常简单,就调的时候是吧,调的时候你不得给他传一个东西嘛,传的这个你叫变量也好,叫具体的常量也好,还是个表达式也好,就是实际的这个参数值了,哎,就简称了叫实参。啊,这个呢,咱们先明确一下啊,这个明确完以后呢,下边我们来看一下,诶,那我们在调离方法时呢,传这个十参,十参呢只是传给行参了,这是不是又出现一个复值操作了。哎,那么就问这个复制操作是什么样的一种规则了,其实跟这个是完全一样的。来来,我们先写代码。哎,大家先来体会啊。Value transfer test1啊。好,没方法进来啊,OK。好,那么这块呢,大家注意看啊,首先呢,我还是啊,这个咱们先这样说啊,这个第一种对于基本数据类型的变量啊来说是吧,好了这块你看啊,嗯,这块的话呢,我先印了一个值,这个M啊还是十。
17:08
然后呢,现在不是我们想体会是方法嘛,所以我这块就定义方法了啊,诶public VO这个我就称为呢,叫METHOD1吧,然后在这呢,我定一个也叫M,诶我就故意恶心大家的啊,我这也叫M是吧,然后M呢佳佳啊。哎,完事了啊好,现在呢,我在密方案里边想调他,那你得造对象啊,提前这个对象我就写到上面了。啊,这个叫test啊,你有一个他。好在这个位置啊,我通过这个T点,我去调M1哈,我把这M呢进去了。附进去之后呢,诶,我现在调完方法以后,我去打印一下这个M的值。这个值是几?十还是11?这个声音呢,明显小很多了啊。是。11。
18:00
也就这俩吧。11的声音还是有的啊。看一下呢。十是吧。诶,刚才以为说这刚才说这结论说半天感觉多简单啊,结果真正上手的时候发现不是这么回事了啊。怎么理解,看看啊。哎,八成你理解错误呢,我都知道你错在哪儿了啊,那咱们就直接呢,按照这个内存体系啊,就按照咱们说的那几个基本原则来就行啊。呃,没方法进没方法一进来这是一个战,然后呢,这个没方法,这就是个战争了。然后呢,这个我就省略了啊,有个test,然后指向的是吧,这个就了啊。然后呢,接下来你在密方法里边定义类M。M呢,这是十。然后注意接着啊,我通过这个T呢去调MA1,这是一个新的方法吧。系列方法,每一个方法是不是都是个战针?所以呢,这是不是又来一个,这个是没方法的啊。
19:00
哎,这是咱们这个method的方法,我就method方法METHOD1啊这样写了。好,那么这个METHOD1这个方法呢,我们就调用了,一调用它就压入战了,这是一个新的战争,注意这是不是一个新的变量。对,只要你看到变量前面有类型,这就一定是刚定义的一个新变量了啊,这个变量是一里边了,所以它这里边也有一个M。然后呢,你拿你没方法中的这个M,这个M你赋值给了人家这个METHOD1里边这个行参的M了。注意,这是不同的变量。上面俩是一个,这是一个。呃,这个M呢,你可以叫做实参。这个是人家MA1方法定义时的这个型材。哎,你把你的值付过来,你是基本数据类型,存的就是数据,那就是把你这个十是不是付给它,所以这是不是就十了。好,然后呢,你在这个一方法中让M加加这个M呢,一定是他自己的。你说哎,这不不能是这个这个吗?你这个作用玉是不是在你大框里了。
20:02
你也你也看不着啊是吧,所以你能看到就是你自己这个啊,所以呢,他把他自己这个M呢,改成11了。那么这个方法就执行结束了,执行结束呢?这个战争是不是就弹出战了。他一出战,我们再去打am,这个M是不是肯定是你没方法的M?是不是还是什么。诶,这个理解清楚以后呢,你从这个感性上来理解啊,就是我有一个M,我把这个M的值我给了你了,你加加了我没变。咱们刚才写的。第一个题目。不也是如此吗?只不过呢,那会儿我们那个叫N是吧。我这块呢,我故意给你写成M的。就是哎迷惑你,你发现诶这不都是M吗?怎么没变呢?诶这是两个M,注意啊。哎,注意啊,行。这是第一个题啊,稍微的感觉上确实有点难度了是吧?好,那么接着我们再看,对于引用数据类型的变量来说。
21:03
好,那这块应该能猜得到啊,是怎么回事了是吧。这块呢,我们这样来处理哈,对于引用数据类型变量来说,那不妨我们这块呢再来一组,我这个叫一个person吧。哎,这块我定一个A是吧。好,那么这块的话呢,我们去定义一个方法啊,Public VO,这个我们叫METHOD2了,这个呢,我叫个person,写个P。然后p.a值加加是吧。写完了啊好,然后呢,在这个位置没方法里边,诶我呢就声明一个person类型的,哎,我也故意我也叫还叫P啊。哎,我去扭一个person。捏完以后的话呢,通过这P呢,我调这个A复制为十十岁了。好,那么接下来我们通过这个test点去调这个METHOD2这个方法,我把这个P呢给它放进去。放个屁进去是吧。
22:03
这个这个接下来啊,调完以后呢,我们再去打印一下这个p.a哈。啊。有同学很坚定的说,十。十还是11?11了,就。走一下。真实一是吧。能不能行?嗯。看啊,你说这大早上这就给一下就整蒙了,给他蒙一天是吧。啊,看一下啊,你看我们翻来覆去画的内存图啊,就还是那么几个基本原则哈,诶魅方法一进来,然后呢,这是一个战争了啊,这个战争里边前面不管了,这呢声明一个局部变量,这个叫P。然后用这个对象在堆里边,呃,对象里边有属性,属性刚才叫A了。嗯,A值呢,我们默认值呢是零,这个事呢,我就先写一下吧,然后把这个地值呢,给了我们这个P,所以呢,它就指过来,接着呢,你通过P调A值呢,把它改成十,这块应该很清楚是吧。
23:10
好,接着啊,接着我们调一个新的方法,只要是个新方法,就是个新的战争。好,这个METHODS2,这是METHOD2这个方法的战争,好一进来以后注意,嗯,这叫石惨哈。然后呢,你这个方法呢,往这一看,这是不是有个刑法。所以一定要小心一点,行残行残人家也是变量啊,所以你别看不起人家是吧?诶,它呢也是一个局部变量,所以也得放到这个战争里边,这儿呢也叫P。我就故意恶心的啊,这就叫P了,其实你可以完全可以叫P1,这样呢你会更清晰,这是俩变量是吧?诶好,这叫P1吧,比如说啊好这叫P1,然后你把这个P的十参,然后呢,付给我这的行参P1了,那问付的是什么?对,跟咱们前面一样,只要是已经数据定性变量全是负地址值啊,所以你把你的地址给我,我不就也指向它了吗。
24:00
哎,进而你在这个方法内呢,通过P1是吧,你去调这个A加加了不就改成11了吗。然后呢,在结束以后,这个战争呢,就出战了,他一出战你再掉掉的P肯定是没方法的P了。哎,然后呢,掉一,这不就11吗。哎,只不过呢,就是咱们相较于刚才哈写的这道题目来讲,咱们是直接呢,在这里边体现了两个局部变量。而我这里呢,是把它放在了一个方法的行参的位置了。啊,至于说这个结果,你说怎么变了,这个那个的是吧,你就记住不变的东西,那就是我们的这个准则。啊,这个准则是不变的,好注意看啊,这个规则是什么呢?这个我们目前说的是什么呀,就是这个食餐。诶,食参给这个行参这个赋值的这个过程是吧。啊,这里边儿我们说了哈,说呢,如果这个行参是基本数据类型。
25:01
啊。基本属于类型的变量,则哎,将我们说这个食参的,呃,食参保存的数据值就是付给刑残是吧。没问题吧?行参是基本数列,那你13肯定也是基本数列型啊,诶将食参保存的数据值传递给这个行参。呃,然后对应的。哎,如果行参是饮用。诶,引用数据类型的变量,则将13保存的。地质值哎,传递给型菜,其实跟这个是不是完全一样。只不过呢,这个是方法内的是吧,这个是我们这个行参的位置了啊,所以都是没区别的啊,结论就是大家的传递机制都叫做值传递机制。所以面试题如果要问说Java中的参数传递机制,它这个参数呢,说的是这种行参这块啊,其实上你把它改成说,诶Java当中的这个变量的传递机制是什么,其实都一样啊,就叫做值。
26:04
传递。哎,有的时候他会误导你说,诶是不是叫引用传递呀。哎,这个一定要注意啊,不能叫做引用传递。啊,因为你像我们基本书类型是不是根本没有引用之说啊。没有引用地址之数啊,所以呢,这块呢,我们,哎这个使用一个概念呢,去包起来,那就叫直产地。哎,就是值传递是吧,看你是什么值了。OK啊,不是引用传递啊。好,这个呢,就是咱们说的整个这样的一个结论了。那关键的就是这个结论大家是否能够灵活运用啊,这是一个问题是吧?好,那么关于这种机制呢,咱们就说完了,下边的话呢,我先写两个例子来,大家呢,来去理解理解,看看能不能hold住哈。Transfer。啊好,这个呢,没方法进来。哎,这呢,我们做两个小的练习啊,这个练习呢是这样子的,现在的话呢,我在0B方法好方法里边啊,我定义两个变量啊,M呢是十,N呢是20。
27:06
说呢,我现在呢想交换两个变量的值。这个呢,我们在好早以前呢,做过这样的需求。哎,交换完以后呢,我们打印它希望是换纸以后的啊,所以呢,在交换之前我们先打一次。好,然后呢,你交换以后的话呢,我们再打一次。希望这时候呢,你确实呢是交换了,那交换的这个操作呢,咱们以前也讲过了,是不是直接就定一个临时变量就行是吧?啊这块咱们就直接来了啊哎,Time呢是M。然后呢,M呢就拿这N去付啊,N呢拿temp去付是不是就可以了。好,走一下啊。好,M是十,N是20,这样呢就交换了没问题啊,以后呢,大家只要涉及到变量交换都推荐啊,用这种临时变量的方式啊好,现在呢,我把这个呢给注释掉了。
28:04
诶,我给注释掉了啊,因为有同学想说,诶我能不能把这个操作呀,封装到一个方法当中去做。哎,这样想了,我们就这样做了。就这样啊,说public。哎,这个我就叫做swap了,交换的意思哈,好,我定一个M逗号,我定一个N啊,这我还是故意的啊。哎,上来就给你整了一个长的一样的,这样你以后遇到不一样了,你反而更清楚了啊说我呢,这两个变量,一个叫M,一个叫N,然后呢,我交换这两个变量的值,其实不就是这三行代码吗。粘过来啊。好转过来了。粘过来以后啊,那原来呢,你是直接调到这三行,现在呢,我们把这三行放在一个方法里了,我这块呢就调方法呗。调用方法啊,调用方法呢,我们说得用一个对象了,所以提前咱们先把这个类的对象啊,先给大家造出来,为了不破坏这个格式,我就把它写到最上面了啊。
29:00
好造完这个对象,好,那么在这个位置呢,我们通过这个对象呢,去调这个叫wap,我把这个M和N呢就放进去了。这不就放进去了,哎里边呢,就掉这个交换了,哎交换完以后的话呢,我们才去打印说诶这不就应该交换成了吗?结果事实上呢。发现没有变。那么问能不能理解?诶,核心逻辑是怎么着,导致没有变。啊,外边的这个外边指的就是这俩是吧。对,那里边儿交换的不是这俩吗。对哎,交换这块呢,得得注意啊,咱们这时候呢,其实是不是有两组变量了。对的啊,所以这个核心逻辑呢,是这样子的,诶这个事儿的话呢,咱们稍微画一下图吧,我在这个内存解析PPT里边啊,咱们在这儿哈,关于值传递机制啊,啊这呢,就是我刚才写的这个核心的这个逻辑了。
30:04
啊,没问题啊好,现在这个main方法,我们一调用main方法呢,是作为一个方法了,它的调用呢,就会以一个战争的方式,哎,压入我们这个站里边了。这呢叫没方法。好这样啊,然后没方法里边呢,其实上来是有个xxx,我这块不关心了,我就不写了,诶然后呢,点点点点点就涉及到了,我们要想调外呢,你得造一个当前这个类的对象,这个代码我也省了,诶咱们只关心最核心的,这里边儿呢,定义了俩变量,一个是M,这个值呢是十。定义了一个N,它的值是20,完事了,好,那么接下来呢,通过这个test呢去调swap方法。哎,我们说呢,这是一个新的方法了,这个得用一下它这个框哈。真的是一个新的方法,所以这个方法呢,一旦调用,它就又是一个战争进来了。Swap。啊过来磁F里边,注意我们这呢是刑参,刑参呢也是算局部变量,所以它呢也叫M,然后这有个N啊这呢叫刑参,然后你把诶may方法里边的MN作为实参传递给这俩刑参。
31:13
哎,这呢,还是基本数据类型,就传递你本身保存的数据值。饮水类型。啊,语音类型还没有呢是吧。啊,这个都是基本数据型啊,哎,所以呢,这个呢是拿你这个十付的,这个N呢,拿你这个N的20付的,就这样。好,然后呢,在我们这个swap方法里边,我们又定义了一个叫tap啊,你可以在这再来一个tap。下边就是具体的过程,他们呢拿M负的,所以这是十,注意是你这个M啊。这是十,然后接着呢,把N呢给了M啊,其实这时候你交换的呢,N给了M是都是这里边儿的啊。哎,改成20。哎,整小一点啊。
32:04
这个呢是你这个20,然后呢,再把这个time呢给了n time呢给了N,所以把它呢改成十。哎,复制一份。变成十,这个十呢,是你这个N的了,行完事了啊,哎,那么这时候呢,我们说呢,交换了吗?呃,是有交换,哎,但是呢,你注意交换的可不是may里边的。是你这个外里边你自己这哥俩在这玩呢是吧。哎,当你这个执行完以后呢,你这个此外这不就整个就出站了是吧。嗯,然后你出去之后呢,我们再打印,打印的注意是may里边的这个M和N,所以根本没有换成啊。OK,这也就是我们这个最核心的这样的一个逻辑。好,我把这个事儿呢给大家截一下图啊。哎,这个我就放到这儿了啊。诶放到对,放到这里边了,CTRLV一下。啊,Shift f6。哎,参数。
33:02
哎,传递机制举例一是吧。这个呢,其实跟咱们前面讲的这个呢,都是一样的啊,只不过呢,这个呢,作为一个例题也好,练习也好,哎,我把这个图呢,特意的给大家画一下啊,给他为代表的行,这个呢就完事了。啊,那么接着呢,我再去举个例子,哎,大家看这个操作能不能实现换值啊。叫value。Transfer。哎,TEST3啊。好,还有一个没方法。来进来啊好,那么这个命方法里边呢,我同样的啊,定义了两个变量,然后呢。呃,定义两个变量啊,但是这块的变量我这样定义了啊。这两个变量呢,我不能直接定义到这儿了,我这样啊,我声明到一个类当中啊,比如这个类呢,我就叫做贝塔。在这里边我定一个M。啊,先写上啊定一个N。这样的啊好,那么一过来的话呢,我们刚才那个例子里边MN呢,一个是十,一个是20,这呢我就是造一个对象。
34:04
塔一了。我就叫啊。叫得塔啊好,然后那个塔点M呢,复值为十。贝塔点N呢,我复值为20。作为这个类中对象的两个属性,一个是十,一个是20,然后此时呢,我们也是先打印一下,嗯,M是多少。嗯,逗号一下这个N是吧。哎,加这个你不能直接看到了,实际上是得塔点的啊。好了,那很显然呢,一个是十,一个是20没问题,下边的话呢,我们想交换的是M和N的这个值了,那此时呢,我也把它放在一个方法里边。你像咱们要是按照刚才那个思路的话呢,似乎是这样了啊,呃,就是我们去in一个ta是吧。它等于得塔点M。贝塔点M。贝塔点N。
35:00
然后A塔点N。拿time是吧,哎,你说这是我要打印的话,他们会换不。肯定会是吧。不是交换了吗?这个这个清楚吧。这个清楚,好,这个我就不解释了啊,好,那么接下来话,我们同样的啊,再去这个位置我选的。然后呢,诶,我也把这三行代码,我CTRLX我站到这儿了。这个上面我就。这个我把它这个在CTRLC,我再留着一份,我把它给注入掉啊。这个呢,咱们看到叫方式一吧。哎,或者叫操作仪啊。现在把操作一去掉了,我改成叫操作二。好,那么我呢,就不通过这三个代码去做了,我把三个代码放在一个方法里边,然后我叫我这块就直接调这个方法,调方法呢得需要对象,所以提前把这个对象呢,我先造一下。然后在这个位置呢,我直接通过这个对象呢去调这个swap,然后把这个data呢放进去问。
36:01
换了吗?画了。老七。确实换了是吧,诶你看啊,这时候呢,你可能从这个感性来理解呢,感觉好像有点不太好接受啊,你看我们在第一个题目当中呢,我写了三行代码,这个呢,也看作是咱们这个叫诶操作一了哈,这个时候你发现的是能够交换的。然后呢,诶,我现在呢,把这三个代码就放在方法里边了。哎,那我们这第二种情况呢,就直接来调用这个方法,这属于咱们这个叫操作二了。诶,这个操作二呢,就是这三行代码放这里边儿调用的结果发现没有换成,那现在呢,我们把它呢,诶是这样操作的啊,整个这两个变量呢,放在一个类里边了,那造的是这个对象,然后呢,这是也是直接交换方圆型,然后放在方案里边呢,发现人家也行啊。哎,就别蒙了啊。哎,那么这个事儿呢,能不能理解。能理解是吧,其实这块呢,就是咱们讲的还是那个机制是吧,来你看我这写的这个代码啊。
37:02
好,我来看一下,嗯,这儿呢,这不就我刚才写的这个核心的代码了。Data塔里边M和N,然后呢,造data对象,哎调swap是吧,没问题啊好,那么首先呢,我们去调用这个may方法没方法这块呢,这不就是个战争就进来了。啊,这是一个妹。好,然后这个方法里边造当前这个test这个类的对象的这个事儿呢,我就给略掉了啊,哎,我就直接看下边的这个呢,叫声明一个data的变量。这个变量呢,用了一个data塔,在堆空间当中造一个对象。哎,就它了啊,最下呢有地址值这呢,我把这个地址呢标出来。哎,08899,比如说啊。好把这个地址呢付给我们这个。通过这个地址呢,就指向了对空间当中你创建的当前这个对象,然后对象里边呢,有属性M和N。
38:03
诶,M和N好,诶那当然了,一开始这个M的这个值呢是零,它这个值也是零哈,这个小细节呢,你要给他保留呢,就也留着,呃,那么目前呢,这一行代码我们认为呢,就执行完了。下边呢,通过这个data呢,去调M,调N呢,去改这个值。嗯,把它改掉,把它改掉。哎,这个变成十啊。这个变成20,好,这个没问题啊,对应的就我们这样的这两行操作了,嗯,那么接下来我们通过test呢,再去调一个swap方法,OK,一个新的方法。新的方法就是一个新的战争进来。此外方法好过去啊,诶这呢,我们有一个行参行参角data塔,注意一定要小心,这是一个新的变量了。将啊,上边的这个得塔啊。
39:03
这个data塔就是这个data塔啊,你在我们这块调用方法的时候呢,你就叫实残了啊,你复制给我们这个形参。这个呢,就我们诶swap里边的data啊,实参付给这个型参已用类型变量,你存什么就传什么,存的是低脂值就传低脂值。所以呢,进一步我们这个swap里边的这个变量呢,也指向它。啊,然后呢,你在内部。哎,我们定义了一个新的变量。这呢,是为了我们复制方便来的哈,叫ta。他呢是拿得塔点M,你这个自己的得塔啊,点M10啊,这就十了。然后data塔点N呢,给了data塔点M啊塔点2N给了M。把这个改一下。是干掉。改成20。哎,这个我就。直接抄一下这个也行是吧。哎,这不就变成20了。好,然后呢,再把这个,哎,这个这个得塔点N给了M,得塔点N给了M,好给了,然后time呢给了德塔n time呢是十给了我们下边的N。
40:10
啊,这不就下边这个,这个就变成十了吗。OK啊好,那么这个方法呢,我们就结束,结束以后呢,他就弹出战了。弹出以后呢,我们再在这个,诶这个方法执行完以后呢,下边我们去输出,输出呢,其实就是main方法里边的这个data做输出,哎这个呢,不就改了。哎,就是这样个效果,呃,其实核心的问题呢,就是呃,这两个data呢,它复制的啊是地址,所以其实指向呢,还是同一个对象啊。导致了一个改,另外一个跟着也跟着改,而我们上一道问题呢,呃,也复制了,但是这时候你直接复制的是基本数据性变量。所以这块是真的多了一份复制品了,所以你改不会影响他。哎,这是核心的这个问题啊,体会一下。把这个图呢,我们也复制一份。诶,放到这儿啊,CTRLV。
41:01
啊,Shift f6。哎,参数。哎,传递啊机制举例二。好了啊好,那么通过刚才这样的一组题目呢,希望大家能够去体会一下这个参数传递机制的这个问题啊。不管是参数也好,还是方法内定义的这种局部变量也好,它的传递机制全都是一样的,我们都统称为呢,叫做值传递,记住的这两个值,具体的是数据值还是地址值,只要呢这个原则掌握住。啊,你去解决具体问题呢,去分析就不会出错。大家不要记一个不靠谱儿的结论啊。什么叫不靠谱阶段呢?就是说诶,如果传的是基本数据类型变量呢,这个就不会改原来的值是吧,如果传的是营数据类型变量,就会改原来的值。不要记这个结论哈。理理解我意思吧,你看就像我们刚才说这俩例子,说你这不传基本水灵变了,发现原来这个不是没改是吧,你要传引的话呢,哎,这个引用呢,改了,然后发现原来这个也改了是吧,你别急这个哈,这个结论呢不一定靠谱,以后呢,我们还会讲字符串。
42:10
啊,你要记我刚才那个错误结论了,你发现那就不对了,你就记这个事儿啊。嗯,你是什么类型的,你该传啥你就传啥,这是原则,万变不离其宗,宗在这儿是吧?好,这个呢,我们就说完了。好,那么这块呢,说完以后呢,我们来看一看这个职传力机制的这个客户的这个题目了,诶这块我写了两个练习,然后有一个呢,就是呃,企业的一个面试题哈,诶我们分别来看,首先来看第一道题。那第一道题呢,是这样子的啊,说呢定一个circle类啊,包含double类型的radius,代表圆的半径啊,求面积,然后这呢另外一个类啊,这呢涉及到这个相关数据的一个输出了,希望呢显示这样的一个数据。好,那我们就一个个来啊,首先看第一个需求,哎,把它CTRLC啊。哎,这里边儿的话呢,其实大家你会发现啊,只要呢,我们涉及到呢,方法有行参了。
43:03
呃,然后你调离方法的时候呢,需要传十参,这全是要用到我们现在讲的值传递机制的。嗯,以前呢,可能我们用了,但是没有怎么去注意这个事儿啊。好,看看这里边的一个需求,定一个SQL类啊,定义了啊,定义double类型的。Radius。啊,这个呢叫半径啊。好,接下来的话呢,提供一个find area,这叫求圆的面积啊,明确说了就要返回了啊。哎,Public的double fund area是吧?啊,Return一下。哎,3.14是吧,或者这块呢,大家你也可以调我们这个麦有一个常量啊派。对,他这个呢就更长一些。就是它这个小数位啊。哎,你看我这块呢,按住CTRL键哈派这不就比较长是吧。咱们班有同学能记住后100位不?
44:01
有人有记这个的是吧。对可以没必要对,这个其实就是就是训练,你就是一个记忆是吧。嗯,其实以前的时候我还我小时候我我我还自己还研究过这种,怎么去记呢啊。呃,有一种这个记的方式是怎么做呢?就是你要人呢,其实不太擅长处理这种抽象思维是吧,假期呢?诶,我学的那种方式是这样的啊,就是你自己呢,比如把零零到99。这是全是两位数,这一共才算是有100个是吧,哎,你把每一个这个两个这个数值呢,你想象一个形象的东西。比如零零,你可以想象成是个零到零儿是吧。当然零二的话,你别想成零二了啊,就是这个你你要一定要确定零零呢,你可以想象是零的是吧,两个零到你也可以呢,想象成是个眼镜。都可以,或者你最好呢,就是一这个俩数字呢,你可以多付几个。但是你确定你别跟别的数给整混了就行哈,然后呢,我们比如说有一串无意义的这个数往这一放,怎么办呢?你就是每两个一组。
45:08
每两个一组,然后你从前往后呢,去编那个故事。是吧,这个故事越夸张越好,是夸张就让你大脑,那就因为人对形象的东西呢,是很有印象的,你把它拿一个故事穿起来,然后呢,这个数呢,其实你也就记住了。故事呢,我们一般都不太容易忘的,那这个数的话呢,回头你就把这个故事呢,一个一个的给它穿起来。跟记忆宫殿一样。哎,把它呢穿起来就行,然后你不断的去训练训练训练,那回头这种数呢特别长,其实你也可以很快的就记下来。啊,就这样一个思路是吧,对,只要你训练就行,其实这个咱们看那种对象大脑啊等等的啊,其实每个人大脑的潜力都是很很大的啊,哎,你需要不断的去训练,其实就是啊。所以这里边就涉及到一个点啊,就是这种职业的这种选手跟这种业余的呀,他一定是有区别的。以前没这种感觉哈,呃,其实你真的,你不管是什么比赛,只要是他是职业干这个的,他一般都比你业余的要强。
46:05
包括打乒乓球,其实也是是吧,你也觉得你说再再怎么着职业干这个的,他肯定比你要厉害。足球啊,对足球,前几天好像这个足球是是申花还啊国安是吧。啊啊对,跟一个地方的一个业余的,然后给人家给。国安的被被了是吧。哎呀,这个真是这个中国的足球这个职业的跟业余的呢,可能还是一个特例是吧。嗯,所以说呢,我们说任何话呢,没有绝对的是吧。嗯。好,这个拉回来啊。哎,那么这个circle呢,完事了啊,Circle完事了,接着看下一个啊这个。CTRLC一下。这个呢叫pass啊,其实就是传递这个值的意思了。哎,我们过来啊,Pass。啊。
47:03
哎,这两个往后移一下啊。这样把这个去了啊,这样好看一下,说定一个叫pass object说呢,在这个类里边呢,定义一个方法。方法呢?声明如下,按照人家要求,咱们也这样弄啊。哎,就这样了。呃,然后呢,在这个方法里边,你看干什么事儿,当我们调列方法的时候呢,你传一个circle,然后传一个time,然后呢,我会去打印啊,一到time之间每一个整数的这个半径值啊,以及呢,打印对应的面积。啊,比如说输入五的时候啊,怎么着啊,这块有一个显示效果,咱们就参照它来。啊,回来啊。哎,就这意思啊,所以呢,当我们调这方法的时候呢,你打印出这样一个效果。哎,那咱们就依这个效果呢,我们去设计这个方法啊,首先呢,我们在这里边呢,先显示一下,你这个叫radius啊。然后这个杠七杠七吧,再来一个。哎,对应的就我们这一行啊。
48:01
好,这个完了以后呢,接下来呃,这个左边这个呢叫半径,右边呢是它对应的面积,所以呢,我们这传进来一个C,那C呢,诶这是一个循环吧。所以放一下是吧。嗯,这个I呢,我们就从一开始了。Time呢,如果你传的是五,他还打印五了,所以这块我们要个等号。这样是吧。哎,那么在这里边儿呢,我们首先呢,给这个C啊,它的半径呢,赋值为这个I。啊,这是一个double型的。这个呢是一个int型的自动类型提升。负一的话就1.0了。呃,然后呢,半径附好了面积其实自然而然也就。你一掉也就自然有了啊,所以下边我们就直接呢就打印了。这个就是c.readus。然后呢,就诶这么着啊,杠T-T。c.find area。这块能看懂吗。那因这是个变量,怎么这是个方法呢。注意啊,这个对于我们来讲呢,你看到的说我调了一个变量,这我调了个方法,但是呢,对于这个编器来讲,他看到的。
49:08
其实就是一个变量,就是你这个方法的返回值。诶,他看到的其实也是一个double。啊,一个值啊,是你调完以后的那个返回的那个double值。OK啊,所以这是个值,这也是个值,就是对应的你第一行的这个事儿。然后当你这个I加加的时候呢,这不就诶复制为二了,哎,那这块呢,就是你的二的这个半径和二的面积。啊,以此类推啊,整个呢就到五了就是吧。那就到这儿了啊。好,那么到这儿以后呢,接下来我们这个I呢,再加加就变成六了,六小于等于五不满足,所以就退出循环。哎,当然那时候我们这个圆的半径呢,其实还是五是吧。嗯,他这个题目不是说说这个半径目前是六。相当于还得给大家赋个值是吧。这怎么怎么弄。这点是加加等于说这样是吧。
50:03
直接付个六那不行,那我这time不一定是五啊。对吧,也就来个time。哎,其实其实这样吧,你看这样哈,我们这个I呢,其实我现在想用I,最终退出的时候,它不就是六吗。嗯,你想这样写个I,这其实他看不见是吧。那不行,你就把这个你搁这儿得了。这样是不是就行?哎,它是一,然后他最后的时候,它是time加一的那个数,那我就这样浮下这就行了啊也可以啊。好,这个方法呢,我们暂且写到这这个输入语句呢,你可以放到方法外边去调啊。然后呢,去调行,那我们下面就来调这个事儿啊,在这写个没方法。哎,想调他先得创建当前类的对象。哎,这样了啊,通过这个对象呢,我们去调这个叫pass areas啊好,那么在这个位置的话呢,你看我们需要呢,是不是传一个叫circle是吧。诶好传个circle扣呢,我就在这儿去创先创建一个啊。
51:03
叫C我就叫吧。哎,你一个啊circle口啊好,然后把这个对象呢,我们传过来,这块呢,就是涉及到了我们这个所谓的职传递机制了啊,我把这个呢传递给他,哎这呢叫行参了,然后里边呢一顿操作啊,一顿打印啊没问题,Time这块呢,我们复制为就拿五来付吧。好,那么里边操作完以后呢,接着出来以后啊,咱这有一句话啊,说这个闹。Radius is冒号。加上我们这个circle。他的radius。问,是6.0吗?你看我传进去的是吧,里边呢一顿操作操作的其实都是这个C了啊,那出来以后我们再看我的radius是6.0嘛。哎,有的人没底气了是是吧。打印效果这块呢,这差点意思啊,在这再补一个杠七呗。
52:02
哎,再run一下。啊,不错位置了。应该在这儿补啊。好,Run一下。哎,这你看对齐了,对齐了,哎,这个啊,它这有个换行,这是小事啊,哎,Now readus is6没问题。那这呢,其实就涉及到了我们把这个circle作为13传递给你一个形态时,它俩其实指向的是对空间的同一个。原对象是吧。所以你在这里边儿呢,去改这个C的半径的时候呢,其实它呢,指向的那个对象不也。也都改了。咱俩指向的是一个是吧。所以出来以后我再去调,当然也是6.0的啊。行,哎,稍微的体会一下这道题目,哎,下来可以写一写啊。啊,这是它,然后接着我们来看这个第二个题。第二题看这啊。哎,精神精神啊。困了就稍微的站一会儿就行。
53:01
嗯,看这个啊说呢,针对于啊,艾特硅谷零四里边的,艾特硅谷零四这里边的,咱们写过一个这样的方法啊,诶这样的一个类啊叫myri。这个类里边呢,说需要我们做一个改进啊,说呢这个数组排序这块呢,希望指明排序的一个方式,从小到大,或者从大到小。啊,是这个意思啊,咱们先把原来的这个题目呢,我CTRLC这两个代码粘过来,哎,我放到咱们这里啊。啊粘过来了,他说的是这个意思,咱们在测试的时候呢,这有个排序。啊,这个so叫排序,排完序以后的话呢,打印当然就是有序了。哎,你看这时候呢,是一个有序的啊,他现在希望什么呢?就是我排序的时候呢,可以再定一个这个排序的方式啊,你是升序还是降序。哎,就是更这个这个叫什么更多样了啊,所以呢,回过来以后呢,我们就考虑呢,把这个方法呢,给它改一下是吧。
54:00
诶改一下啊,那么改的话呢,其实我们也没必要呢去改现有的代码,这个代码的话呢,因为我们可能已经有人用过了哈,所以最好我们再重新再定义一个,诶这个时候的话呢,诶我们这俩方法是不能同时存在的。咱们也讲过虫宰了。诶,在一个类当中,名一样,参数里边一样是不能存在的是吧。哎,那我们可以呢,是不是顺带着不就是再加一个参数呗。哎,这个呢,比如我叫一个。排序方式吧。是不是这意思啊?哎,那此时的话呢,参数列表不一样了,这就两个不同的方法了。哎,那你调的时候你要传俩参数,这个就掉它,传一个呢就掉它啊。好,那么这个意思是什么呢?就是你想升序还是降序,你在这儿呢?你告诉我一下。咱们默认的是升序。所以这个代码呢,不妨我们前面就先加一个判断了啊。判断怎么着呢?哎,如果你这个方式,哎这块咱们注意一下啊,不要用等等。对,咱们前面讲那个高富帅的时候说过是吧,诶这个我们用equals啊,这个呢,我声讯呢。
55:05
就叫asc了。诶,所以在这块呢,咱们可以稍微的加一个这个文档注释哈,这个呢,就是针对于数组进行这个排序操作啊,然后这个AR呢,就我们这个带排序的这个数组,这个method是个字串啊,这个我们就你A的话叫做。D呢,我们叫做降序啊,这有同学说,哎,这怎么用它呢,这个因为A呢。它叫ascend。啊,叫生去的意思。哎,所以呢,我就取前三个字母了啊,哎,这个呢叫decent是吧,哎,所以就是降序的意思了。OK啊,以后呢,我们讲SQ的时候就是数据库操作那个SQL语言是吧,诶他到时候也有升序和降序啊,诶我们用的就是这两个。那词儿啊。好,那如果你要是写的是A,那我认为你就是想是不是就这个操作。
56:01
诶,我就把这个呢,CTRLX啊,我就扔到这儿了。这是序啊,然后else if啊,如果呢,你是啊,Salt method.es这个呢叫death。就是想想降去是吧。下去呢,把这个CTRLC我粘过来看看改哪。降序。是不是这个。诶,如果你发现前一个小了,我就交换。那不是就小的往后跑吗?哎,第一轮过去之后呢,最小的不就跑到最后了吗?这不就降去吗?其他不用动是吧。哎,就可以了,好,然后再来一个else。哎,我们说呢,说哎你输入的排序方式有误。有误啊,就是你写的不是DA也不是AA,这就有误的啊。哎,这个完了以后呢,先别着急测试啊,我说一个小细节的优化以后呢,咱们在写这种判断语句的时候呢,其实你想想这个sort method。
57:06
用户在调查的时候呢,是不是有可能传入的一个no。他就故意的。啊,我要一传照的话呢,这个位置呢。就会拿一个闹,是不是去调一个方法。那它就会出现。控制人一场是吧?对吧,很明显的啊,空制异常了,这个这个这个应该很好理解啊,你看我这块掉这个so的时候,我就故意给你逗号,我写个no是吧,你看这是我们去做一个run哈。是不是控制帧了,哎,34行这个代码你看怎么看啊。我们现在呢,出现有两行了,这个大家看的时候,你你从下往上看。你看我先看下边这个是不是没方法。那方法里边呢,是34行,不就是它吗。其实这就是咱们那个战争。就是这个方法,这不有个战争吗?我在调这个方法的时候呢,你may里边是不是掉了这个方法了。这个方法叫so的方法是109行,其实呢,就是它里边又掉到上面这个啊,诶这个呢,你往里1.109行。
58:06
啊,或者你这块双击一下也行,不就跑到这来了吗。哎,所以呢,相当于就是这个战争里边又掉的这个战争,所以呢,下边这块呢,就是比较早的那个调用,所以你从下往上看啊。哎,就行了,你看这块他也给我们写了,说控制帧是什么原因哈,就是你这个string去调equal时候呢,你这个string,这个sort method,它是一个no是吧。哎,写的很清楚啊好,那显然呢,这种写法呢,就不是特别的好了啊,或者说这个健壮性呢,稍微差点意思。那一方面呢,你可以呢,在这里边儿,你前面先判断一下,说如果你不是闹,我们再让你调,这样是可以的啊,但是我们还有一种诶更简便的写法推荐大家。你怎么办呢?对,你把这里边儿它俩呢交换一下。你看啊,我先写他。哎,然后呢,拿着这个字符串,我去调,我把你这个所谓的后边是不是它就避免了这个问题了。
59:06
哎,这个呢,我同样的道理啊。我把他俩交换一下。哎,Method,那我这样写的。哎,你看我一上来这个闹,说你跟闹一样吗?不一样吧。哎,这个你跟闹一样吧,也不一样吧,那是不是就说你输入的方式有误了。你看再回过来,我们这时候呢,我只改了代码了,我这个位置还是no啊。哎,这个代代码的健壮性是不是比刚才要好一些。哎,所以大家以后写的时候呢,你这样写啊,把这种字面量呢,写到前面,这样呢,就规避了这种控制人的问题啊。这个就写到这儿了啊,写到这以后,这还不是咱们这道题的一个。主要想恶心大家的点啊,说这这也没啥大不了的啊,主要呢,我想说这个事儿。我们在这个so的方法里边,可以升序,可以降序,不管是升序还是降序呢,你是不是都会去交换两个变量的值是吧。
60:02
那这个值的交换呢,你发现你写了两遍。那这时候呢,你这个里边还可能有其他的排序方式,只要有排序了,通常都会交换两个变量位置的元素。呃,那既然如此,我就把这个代码呢,我想抽出来是吧。抽出来我就造这个方法,就是用来交换两变量的。那现在这个问题就是抽的时候你可得小心点了。抽错了,这个就白扯了。咱先看看目前的这个啊,咱们先排个序,你先看看靠不靠谱先啊,我A一下这叫升序。生了是吧?啊,然后我们再复制一份,把这个呢,我注释一下啊。哎,我改成降序。啊,也降了啊,这个目前是对的,没问题,好,现在的话呢,我们想整点花样了啊,所以呢,我想把这三行代码呢给抽出来,造成个方法,你在这个位置和这个位置就调离方法就行了,问题是这个抽取的代码怎么写。
61:01
看我这样写行不行?还还还没写呢啊。接是吧。然后呢,一个是吧。等于I,然后呢,I呢拿接负接呢拿time去付好写完了哈。啊,这个写完以后的话呢,我们就想去替换一下这三行代码。把它处理掉。咱就直接就swap了是吧。这让我写谁啊?你想交换的是这哥俩是吧,A2,哎,逗号A2I加一是吧。好,那么同样的呢,把它CTRLC。把这个给注释掉。把这个往这儿一放,诶写完了。写完了好,回过来我光改代码了啊,回过来我们还是降序走起行不行。不行啊。没换成。啊。为什么?
62:02
值没传出来什么意思。嗯。这个呢,对值没出来,其实这个呢,就是咱们刚才那会儿举例的时候呢,类似于第一种情况嘛。哎,交换的时候呢,你看我没方案里边,就好比你这A和A加一是吧,你把你这俩值呢,是不是给这个里边两个新的变量,一个叫一个叫你这里边呢,咔咔一顿交换是吧,一顿忙活啊,忙活的是挨和接啊。这ari和ari加一是没动啊。对,所以说这个呢,这样写不靠谱。啊,这样写,注意它是错误的啊。那难道这道题就没有正确的写法了吗?哎。对,这个时候呢,大家注意哈,以后我们写这种交换的时候呢,哎,首先呢,这个呢不行哈,得这样去写了。哎,Public word,哎,Wap啊,以后呢,都是这样子的啊,所以你想交换什么呀,你说我想交换一个数组中的两个位置上元素,好,你告诉我这个数组是谁。
63:07
啊,你想交换是哪个位置啊,你告诉我。这样写。哎,在这里边呢,啊,In这个time等于A2的I的位置,然后AI的位置。哎,是AR这个接的位置是吧。嗯,接的位置是我们这个ta这样写。啊,这样写完以后,你看回过来,我们下边呢再去调啊,通过这个swap,呃,你告诉我你这个是AR这个数组,我想交换的是I和I加一。哎,加一是吧,这两个位置上的元素好把这个呢CTRLC复制到这。没问题啊。好,复制过来以后呢,接下来回过去。在这是吧。哎,我们这时候再去做一个降序啊。完成了。哎,得这样写啊。那么这个能理解不?可以是吧。
64:01
这是咱们正确的。这个呢,呃,简单来说的话呢,就是呃,我现在呢,把这个数组传过去了,数组咱们传的话呢,相当于传的就是地址了是吧,所以你在这里边咔咔一顿换,换的呢,你这个地址指向的跟我们外边这个AR这个是不是指的都是同一个数组了。诶,指向同一个堆空间的就是这是这哈,不管你是这个main方法里的,还是你这个外方法里边,总之呢,我把我的地址给你了,咱们指向的都是堆空间这个数组,所以呢,你去这块改,所以我再调不我也改了吗?哎,所以这个就是大方向就是这样子的。行,这个题目呢,我们就说完了啊,这个说完以后呢,大家啊,你可以呢,类似的去改谁呢。咱们是不是还讲了一个对象数组的问题是吧?回忆一下啊,立项数组里边,我们不是把这个诶针对于学生,哎,咱们当时不是做的这样一个题目吗。到20个学生啊,打印三年级的,还有冒号排序,把它排按成绩排是吧,好,那么在这个student YouTube这个里边呢,咱们不也有一个排序吗。
65:09
这个排序的话呢,你也可以呢,类似的啊,再加一个逗号string类型的排序方式啊,你也可以说呢,是顺序的还是倒序的,诶排的时候呢,里边不也有交换吗。啊,你也把它抽出来造成个方法,你看看你能不能写对哈。其实套路呢,跟刚才这个是完全一样的,只需要把这里的int型数组改成student型数组就可以了,这还是的两个索引。诶下来呢,自己做一做啊好,这个我就不写了,然后最后这块呢,有一个企业的真题哈,这个真题呢,还是从这个卖卖上拿的是吧。妹妹,不是这个是吧。啊,那这个题是这样的,你看你会不会啊。看一眼。说呢,这个in一个A是十,B是十,说第二个method方法,下边就让你定义这个method方法,代码就让写它了,啊说调研完这个方法以后哈,我再去打印A等于几B等于几的时候呢,诶希望你打印出来A是100 B是200。
66:07
哎,这个方法怎么写。大家会不会觉得说这道题特别简单?是吧?哎,如果你要认为那还是个附加体是吧。那一般咱们上中介的时候,一说附加题,通常不会太简单啊。嗯。这个题简单吗?不简单。就是这道题的话,你写个错的,我觉得还不如你写个不会。你要写不会呢,我觉得我还高看你一眼是吧?写个错的呢,你要写成这样了哈。就有点儿low了,就是吧。这样错的是不是错的有点low了?或者大家可能普遍想到是不是应该是这样是吧,就是你看他这里边不是让你变成它变成100,它变成200,那我这个方法里边就给它乘以一个十乘个20不就完了吗。
67:00
哎,你这乘的呢,只是改你AB了,出去以后的外边的AB是不是还是十和十是吧。对啊,所以说这个题呢,它有坑是吧。那他就让你改咋整?对这个题呢,其实就是你就发挥你的聪明才智就行了是吧,哎这呢,我写了两种方式啊,第一种方式呢,就是在这里边,诶我这边就还是跟上面一样,这样改了,改完以后呢,我就输出了,输出完以后呢,这个注意我就不给他机会呢,去出去了,直接把整个程序GM全干停了是吧。就让他退出。啊,他就根本没有机会去执行上面这两行操作是吧。诶,这是一个思路,第二个思路呢,就是我我不给你整停哈,这个方法能结束,但是呢,呃,你里边出去的时候呢,这个叫print line,这个方法以后我们会讲方法来重写是吧,就是我不让你去执行这个语句哈。哎,我执行的时候呢,是我把这个方法给重写了,重写以后的话呢,如果你要是发现A是十,我就让你输入100是吧,你要是B是十呢,我就让你输入200。诶,这时候把这个相当于输出的这个结果呢,给大家重新的加了一个逻辑,把这个方法给重写了,相当于啊。
68:04
诶就也也也可以啊,诶这个呢,就是这道题呢,其实所以叫附加题嘛,就是你会呢就做,不会呢就没关系,但是你最好不要。写成一个这么低级的错误的方式就行啊。好,那么关于这个直传力呢,咱们就说完了,这个机制的话呢,会贯穿咱们Java学习的始终啊,因为呢,你只要定义方法呃,有行参了啊,那你这个参数呢,在负十参的时候,这就一定是直穿体机制,哎,大家呢要小心一点啊,OK。
我来说两句