00:00
那这个变量赋值呢,这就咱们说的这样一个算是叫规律或者叫规则,这个说清楚以后,下边呢,咱们说这个变量的另外一种情况就是行参了,嗯,其实呢,规律是一样的。实际上规律是一样的,只不过呢,就是大家写的时候呢,经常就整懵了啊,一写形单就就懵了,所以咱们呢,刻意的来讲一讲,这个叫方法行参的一个致传递机制啊,这呢,我们再去新建一个Java文件,然后叫做Y6哎,Transfer test1啊。嗯,这个呢,我们来考察的呢,是叫方法的行参的啊,叫传递机制。哎,方法行穿的这个叫传递机制,哎,这个呢,赋值的这种机制呢,咱们称作叫直传力了啊,哎,怎么叫直传力,其实具体展开的话呢,就是咱们刚才写的这两条,只不过呢,我们就从这个行参的角度来看看怎么去理解啊这呢,首先遇到一个概念,其实之前咱们也都说过了啊,现在明确提一下叫行参。
01:09
哎,行三呢,哎,我们把它就是这个理理解为呢,就是方法定义时哎定义时哎声明的这个小括号内的参数啊。哎,这参数没啥可说的,咱们昨天都讲过了啊,那对应的另外一个概念呢,叫做实参。这个是咱们现在明确提出来一个新的词。哎,行33,这是一对这种对应的出现的啊,什么叫13呢。就是咱们在调用一个方法的时候呢,实际实际给这个形态负的那个值就叫做时差,就像咱们刚才讲这个,呃,可变个数形态的方法一样啊,下面呢,是咱们定义的这些方法啊,然后呢,我这呢是写了个12,这个12呢就是13。对,我把这个12呢,13赋值给了行参,哎。
02:01
哎,它就叫十参,下边呢,你像这个调用方法的时候呢,这都是写的叫13啊,所以这个呢,就是13呢,就是方法调用时啊,叫实际啊,传递给这个行参的这个值,我们就把它叫做实参。你可能是一个具体的数,也可能是一个变量都可以啊。嗯,传递给形态这个数据吧,哎,就叫做形态啊实残啊好这个概念呢就说完了,然后接下来呢,我们来提一下这个叫传递机制,把这个二这就不要了啊,第二个啊这种呢,叫直传递了,那就直传递。呃,机制的一个描述,好,那咱们呢,通过这个代码的方式上来看,首先呢,我这一个没方法先放到这儿啊嗯,咱们做这样的一个操作,前面呢,咱们讲课的时候呢,说过叫交换两个变量的值。
03:00
嗯,好,交换两个变量的这个值的这个操作,哎,这个大家应该都比较熟了,我现在有一个M是十因的,NN是20行,那首先呢,我们先打印一下M和N的值,跟刚才这块有点像了,我就直接这样拿一下啊。C。哎,打印MN的值。好,这个呢比较简单,接下来我们下面呢,就是交换了。那交换这个大家应该都可以写了啊,我应的进个tap am m呢负N呢,那ta负,哎交完以后。再去执行。看一下。哎,就换了这个都熟是吧?哎,然后我们说这个问题啊,这着交换成呢啊有同学可能就会想啊,这个交换这个操作呢,有可能在其他的场景中也会用,就像咱们讲这个排序一样,排序的话呢,这个数组是乱序的,咱们呢比较完说你小你大,这个咱们有时候会交换你这个冒泡排序会交换你这个快排也得交换其他的所有的排列方式都会涉及到交换两个位置元素这样的操作。
04:18
既然你都会有,那干脆我们考虑说,把这个功能抽取出来,造成个方法得了。哎,那就很合理的,是不是就想把这个代码呢,造成个方法呀,好,那我造成个方法啊,那我就把它呢,哎,注释掉了,哎,下边呢,我们写一个方法,哎,我叫public,哎,这个就不用返回了啊Y,哎,交换呢叫swap或into个M,哎,Into个N。这么着,然后呢,把刚才呢,这三行代码CTRLC粘过来。那你看MN,然后这个M呢复制给他,然后这N呢也过来,这样再交换一下,咱们一点也没改啊粘过来的,那这个操作呢,咱们就是称作所谓的交换两个变量值的方法。
05:05
哎,那方法写好了以后,我们造它的目的呢,就是为了不用再直接这样写了,而是可以直接调现成的这个方法了,所以在这个位置我呢就想去调这个方法啊,那目前为止咱们调方法呢,还都是通过对象,所以呢,我得造你这个方法所在类的这个对象啊,为了不破坏这个结构,在中间这写过啊,写这也行啊,也没也没多长啊,这个我是想把它们写到写到这了啊,其实写这也也可以,也没事啊,然后呢,我通过这个test呢去调查这个叫S外,把我们的MN都放进去。哎,这个相当于我们此时的这个M,它就充当了一个是不是时参的一个意思。对的,那咱们相当于注意啊,你看我故意给你这块呢,写的还挺迷惑的,这个M是我们上边诶看不到了,对这个M呢,是我们这个M这定义的,这个M呢,是一个新的变量行3M对恰好名一样而已。
06:11
这俩是一样的,我把这个实参付给了这个形参。这样子的啊,整明白,然后他俩呢,是一个啊。OK,我现在呢,对他俩进行一个交换,交换完以后按说呢也应该是这种。但是是不是呢,跑一下OK。你会发现呢,想造成个方法,造完以后呢,结果哎没换成,你看没换成吧。那这时候想怎么就没换成呢?对吧。哎,就是看着好像该换成,但是没有换成,但其实这里边呢,没有新知识点,跟咱们刚才讲的这个知识点呢,其实是一样的,嗯,就是大家呢看到的呢,是不同不同的问题,但是这些问题呢,你一定要把握它的本质啊,就有些东西呢,一定是不变的,就是最基本的这些规律和规范,然后基于这个规律规范呢,你写的代码呢,五花八门,什么样都有,那最初的那个规律和规范呢,始终不变,你得始终握着那个最核心的知识,那他该怎么变,想怎么变就怎么变。
07:26
你总是可以分析的啊。不要去记这些型,你记那些核心的东西。这个要想理解清楚,那就得画内存图。啊,那咱们画这个内测图啊,哎,这个我在PPT当中给大家也有一些例子,你可以下来看一看啊,哎,我就呢主要呢来讲的是咱们刚才写的是例题一啊,哎,其实这个代码呢,你看我这核心的写这了,我把这个图删掉啊,哎,你看这个核心的代码我都放这了啊,这是咱们执行的方法,这不就是它一下,然后通过这个test,我这用的叫test的对象了啊,然后调这个swa,这不就调它吗?这不就咱们刚才写的代码是吧,只不过我这呢没有输出,然后就注示掉啊看看这个过程啊,为什么说没有换程。
08:17
我们呢,这块呢,明的这个站啊,这叫占,然后。我呢,从那个没方法进来,先有一个M和一个N。M值十,然后N20。好这就好了,注意这时候呢,咱们是这个没方法当中的M和N。啊,整混了啊,我给你在这稍微标识一下,是没方法中定义的。好,这没方法中定义的好,那接下来呢,我们是通过一个V这个对象去调的S外方法,这个V呢,我就不往里写了啊,当我们调这个S外方法的时候呢,将咱们上边MN这两个叫13,把它俩的这个表示的数据的值赋给了我们,此外方法的行参M和N。
09:23
那这呢,一旦你调用,那你就会涉及到这个型参,那这型材呢是新定义的,那你这块呢,还得在站里边呢去提供。这呢就是M,嗯,然后呢,是你拿上面的M付过来的,就是这个M,所以我这呢也是十。N呢,是拿你对上面这个N负过来的啊,所以我的这个N20,哎,这样此时的M和N,它是我们此外方法中的。
10:03
哎,是我们那个S外方法中的注意啊,行,那我们这个方法呢,接着呢,你调用了,那我就执行,那一进去的时候呢,又生明了一个新的变量,叫做tap啊,那说明了,那你就得写。啊,这叫一个tap,这个tap呢,是拿着你这个M,这个M就是你这上面这M,也就是说你这个M,哎,负的值这能改成十。嗯,这样的,然后我们把这个大括号呢,也给它包住啊,这是十,然后接着呢,拿这个N呢去给了M啊,拿这个N给了这个M,这就是覆盖一下。这个改成。好了,然后再接着呢,把呢给了N,把tap给了N。那这个呢,我们注释掉。
11:01
哎,这个改了改成十了。改成十了行,你想一想啊,我们这时候swap呢,最终实现效果呢,是把swap这个方法里的M和N呢给交换了,哎,如果我在这里边写一个CA的话。那确实是这个,呃,20跟十是吧,是交换了的啊,但是我们这个外方法呢,你接下来是不是执行完就销毁了,那销毁以后呢,我再接着呢,我在后边啊,我这哎CTRL一下啊,我在这个位置呢,我再去做一个输出。你想想这个时候我们输出的M和N是你这个S外的,还是我们没方法的,对是没方法的,因为你这个外方法执行完以后,你这个就都销毁了,是吧,弹出站了啊出站以后呢,我们现在保存的就是我们这个may里边定义的这两个变量,它从这个大括号到这个大括号这一段区间都是有效的,所以很自然的这俩就是我们上面的这俩,这俩没有动过。
12:03
啊,那所以它还是十和20,哎就是这个原因啊,你要是从这个内存这样一说,哎,这就说清楚了啊在那我们为什么没有化学成大家呢,如果出现这样的情况呢,也得能够去解释啊,呃,这样写呢是不行的啊,那总结一下,咱们刚才呢,这个参数呢,是一个基本属于类型的,咱们也涉及到了,把这个实参你传递给一个型参,在这呢,你传递过去的是不是仍然是M和N,它存储的实际上的这个数据的。哎,所以这个规律呢,跟咱们刚才写的这个其实是一样的。哎,跟这个实际上是一样的,说如果啊这个呢,我们你可以明确一点,站长说的是这个参数了啊,说如果这个参数呢,是基本数据运行,那么此时赋值的是那个啊或者此时嗯,这个实参吧,呃,赋给哎行参的是,哎我们这个实参啊,这个真实存储的这个数据值。
13:10
啊再说一遍啊,说如果参数呢是基本数据型,那么则此时十参赋给形参的是十参真实存储的数据值,也就是我们这里边的十和20,那你付完以后呢,那就导致的就是你这里边你有一份,我有一份,然后你里边你爱怎么操作怎么操作,结果呢是不影响我的。就是这样一个情况。那这样的情况啊,那这个情况呢,我们就说清楚了,这个要清楚以后。大家看啊,这条清楚以后我们看这个问题。咱们上午的话呢,这有写了一个叫re YouTube是吧,这个re two的话呢,咱们写了一个方法叫做排序,排序里边你看是不是就有交换的一个操作呀,这个操作的话呢,有的可能就想,诶这个操作呢,因为你要还有其他的排序方式,这个操作呢,会经常写,经常写呢,就想给它抽取出来当成一个方法,好我就把这一注就来了,啊说呢,我们定义一个方法,定一个什么方法呢,就是交换。
14:17
交换叫数组中指定嗯两个位置元素的值,哎这上就写这个方法啊public哎交换完以后呢,你不用返回来直接呢就换完了,哎所以这印了一个I,然后印成一个接哎这上就一写,哎然后这里边呢就直接啊因的一个碳棒等于ii呢等于接哎然后接这呢是一个碳棒写完了,写完以后呢,在这个位置就想去掉了。呃,现在咱们是在这个普通的这个方法里边又调这个swap,所以就不用找对象了啊直接呢就swap,然后就把我们这个AR2接等号一下,AR接加一。
15:02
CTRLCCTRLV一下就写进去了,那么问这样的写法能不能实现排序?哎,有的呢,不清楚是吧,那咱们就看测试了啊,咱之前好时这个都知道,我把呢这个呢先注释一下,不管它了,排序这个呢打开,哎这个打开先把咱们哎先把咱们刚才呃这个呢先注释一下,先把刚才这个打开啊,这是咱们上午写的这个代码啊,写完以后呢,咱们先测试一下这个上午的这个情况啊,这是排序以后的,你看确实是收取的啊,现在的话呢,我把这个三行代码给它注释掉。相当于呢,好像只是把这三个代码放到这里边一样啊,来我再把它打开。然后我们回过来再测。你看没有变。哎,说他又懵了,这时候就不该懵了啊,刚才咱们讲了这样的一个规则了,你这时候你想一想,他为什么会出现这样的情况呢?为啥没换成呢?其实是一个道理是吧,我们呢,上面这样写,咱们交换的确实是A2阶和AR接加一。
16:23
真实的确实是话,这是正确的,你现在这样写的话呢,我们实际上是把这两个实参你传递给了I和街一里边呢,把I和街给换了。你画完以后呢,你就没事了,那我出来以后,我A2和A2G加一是不是还是原来的这个值啊对,就类似于咱们刚才的这个L和N一样,所以说你这个题目这样改是失败的。啊,也就这样写法呢,它是一个错误的啊,啊这个错误的,那咱们先回归成正确的啊,那错误的不能这样写,但是咱们这个诉求还是合理的啊,就是确实我们写很多种排序方法呢,里边都会涉及到交换,都涉及到交换,我们就想把它专门抽取出一个方法,这个想法是很好的啊,但是不能这样写。
17:15
啊,那应该怎么写,就咱就涉及到呢,咱们这个参数传递呢,不能是基本数据类型啊,就得提到另外一种类型啊,我们先把这个呢填一下。
我来说两句