00:00
好了,那咱们就接着再往下吧啊,咱们接着再往下的话,咱们这块来看一看什么东西啊嗯,空值异常我们说了啊,然后呢,内存管理这块我们也说过了啊。好,这个我们也说过了啊,接下来我们看看方法调用时参数的传递问题啊,参数的传递问题好吧。方法调用时参数的传递问题啊。那这块呢,我们把class删掉啊,就剩这些也没写多少东西啊,在这建一个目录吧,我们叫方法调用时参数的传递问题啊,方法调用时参数的传递问题。啊,我们重点来看一看这个各位啊,来CD切过去方法调用时参数传递问题啊这块呢,咱们点右键啊,新建第一个程序test。好,大家注意听啊。
01:02
注意听课,Public class,我们叫test,假如TEST1吧,TEST1啊,Public static voman主方法我们先写上,我们先给大家出一个代码啊,大程序啊,大家看看这个结果好吧。先关掉啊,给它给它改个名叫TEST1。这个啊。来,那咱们呢,这个程序啊,是这样的,在这儿呢,有一个方法啊,Public static void ADD,然后呢,有一个int类型的I,然后接下来干什么呀?在这呢啊,我I加加啊,I加加,然后呢,在这个位置呢,我有一个int I等于十,然后接下来干什么呢?ADE把这个I呢作为参数干啥呀?哎,给它传进去啊,传进去之后呢,接下来system.out点打印,我想输出这个方法当中的这个I的值。然后这块呢,我就给它输出一个ad方法当中的这个I的值啊,我想问一下大家这个结果有什么区别没有。
02:06
就分析这个程序的输出结果,结果啊,分析程序的输出结果。嗯。他会输出什么呢?复制一份传过去,不影响原哀是不是?啊,那么这个题目我觉得得画个图啊,不画图说明不了问题。啊,就是这里呢,最主要研究的是什么,就是方法在调用的时候,这个参数往这传的时候传的是什么。是吧?参数传的是什么?你比如说我在这写一个int类型,我不知道大家还记不记得啊,T加X等于等于100,然后int类型Y等于什么呀?X这个X传给Y的时候传的是啥?
03:08
X赋值给谁,给Y是怎么传递的,就关键研究这个问题,就X赋给Y和这个I呢,赋给这个方法是一样的,这个I呢,传给这个方法是一个道理,X往Y上付,明白吧,就是这个X往Y上付和你和你调这个方法把I传进去是一个道理,你把这个数据呢,传给了这个变量吗?对吧,你把int I等于十传给了这个方法的这个变量吗?是不是,哎,你就相当于把这个X传给了这个YY。是不是,它是怎么传的,X赋值给Y是怎么传递的。怎么传的,我们我之前怎么讲的。它会把X里边保存的这个值怎么着复制一份对吧。然后给谁给Y对吗?会将什么呀,X变量中保存的什么100。
04:03
这个值复制一份是吧,哎,传给谁呀。复制一份传给Y吗?复制一份传给Y。那这个也一样呗,那这个I呢,里边保存的这个十,这个十会被复制一份传过去呗,传给这个ad方法对不对啊,这个意思什么意思,应该是一样吧,是将I变量怎么着中保存的十怎么着复制一份是吧。哎,传给谁呀,Ad方法吧,是不是传给这个AD方法。这个I和这个I是两个不同的I,各位啊,这是个什么?这是个局部变量对吗?豫是什么域啊,域是闷吧,对不对?好,那这个I呢,是局部变量吧,域是什么域啊?玉是ADD域吧。域是ad吧,它的域是不是它这个局部变量是在这个方法里边,这个局部变量是在这个闷方法当中啊。
05:02
是不是啊,那如果用内存图来表示一下的话,那这个内存图怎么怎么怎么怎么表述啊。来,那么这块我就简单画一下了啊各位,那这个程序呢,我就不再画别的了,因为也没有new对象啊,那个方法区我也省了,直接画个站得了,行吧,咱们直接画一个站,各位啊站。呃,首先闷方法执行,所以要压站,那么这个时候呢,我就画个站就完事了啊,这就是那个站吧,假如说啊。啊。Stack。嗯。那么这块呢,我们把它删掉啊,然后接下来呢,首先第一个呢,就是关于什么呀,哎,我们的一个焖方法了。对不对,哎,这就是那个焖方法,假如说啊来,这就是那个焖方法,战争。叫做main方法占针啊,那main方法这块呢,它就会执行,执行呢,Int X等于100 int y等于X,这个呢,我就省了,直接上来是int X int I等于十啊。
06:10
那int I等于十,那就相当于啊,我们这里边啊,是有一个什么呀,叫做。哎,变量是不是,哎这个变量里边是存的是多少啊,是不是十啊,然后这个变量的名字,我们起的名字叫int I呗,Int,哎是不是,哎这个I里边保存的这个数据啊,是多少啊。哎,I里面保存的这个数据是保存的值是十啊,这个值是十,然后接下来紧接着这个程序怎么着呢,它会继续往下走,调用A方法。那么这个代码调用ADE方法,就是说我大概啊,其实这个A方法不应这个不应该写在这里啊。代码是不应该出现在这个内存结构上面的。啊,但是我为了方便大家去理解啊,所以我大概呢是在这里呢,我干什么呀,就大概说一下啊,大概是这个意思就行,各位啊,他会调这个方法,调这个方法它会停下来什么呀?压站是不是方法一旦调用会压站呀。
07:07
那是就相当于把这个。去了。对吧,把I传进去了,那么传给了AD的方法,那么A的方法这块怎么着呢,它就会压榨,而这个呢,其实就是AD方法的一个。方法战针ADD方法战针。是不是,哎呀,Ad的方法战争,那这个ad的方法战争是怎么过来的,是这压过来的。啊,压过来的。对不对,哎,压过来的。压过来之后呢,接下来他这个传给了A方法之后呢,大家看这个A方法是不是有一个局变局变。是不是就相当于这里。也有一个,哎。那么。这个里边盒子里边啊,它保存的是什么东西,就是这是最关键的地方。
08:07
啊,就相当于说我现在int I等于十,调用这个方法把I传进去是怎么着,是把十复制了一份,怎么着把盒子里边保存这个十这个值复制了一份传给谁啊AD的方法其实是这样的啊,就是说。就实际上是把什么呢,把盒子把闷的闷中的什么I变量,盒子中保存的十这个数值。复制了一份啊,复制了一份传给了谁呀,Ad方法。传给了ad的方法啊,传给了,传给过来之后呢,就相当于这个位置,那肯定也是十啊。是不是啊,肯定是。那么接下来这个程序怎么着呢?就挨加加了,变成11了,所以这个100%是等于11没跑。
09:01
是不是哎,等于11,那ad就输出11,那这个位置其实就是输出的就是11了,这呢进行A加加。是不是,然后紧接着呢,输出什么呀,输出。输出11之后呢,接下来这个方法就结束了,各位。这个方法就over就了,就弹出。弹出去之后呢。是这个意思就行,各位啊,整个这个就弹走了,它弹走之后呢,接下来这个就露出来,露出来之后呢,大家看这一块在输出的时候,是不是就输出I是十啊。输出是十啊。对吧,因为你这个I加加是针对于这个嘛,这个地方加一你这块没关系啊,所以我I呢,原先是十对吧,I传过去实际上是把这个十复制了一份传给了ADE的方法啊,然后这边A加加是变成11,这边仍然是十,所以说我们这个程序的执行结果是什么呢?这个还是什么呀?十啊还是十,这个呢是11,那我们来看一下。
10:02
Java c呢,我们去编译一下,我们test1.java,然后Java去运行TEST1轴。Ad方法是11,然后main方法当中是十对吧?哎,Main方法里边是不是就是十啊,就是十啊。那么参数在传递的时候啊,参数Java中规定啊,Java中规定什么呀。规定参数传递的时候啊,和类型无关啊,不管是基本数据类型还是引用数据类型啊,统一都是将将什么统一都是将盒子中保存的那个。值啊,复制一份传递给,传递下去跟类型没有关系,各位啊,你别看说老师这个地方是一个基本数据类型int I等于十,然后把I进去。
11:03
那如果这个I它不是基本数据点,是别的类型,传的时候会不会出,会不会和这个不一样呢?错啊,和这个是一样的,永远都是传的,是你这个变量里边保存的这个值,听懂了吗?永远传的都是你变这个盒子里边保存的这个值,只不过有的时候你要考虑一个问题,这个值啊,有的时候是个普通的数字,但有的情况下,这个盒子里面保存的不是一个数字,而是另外一个对象的一个内存地址。那不管是内存地址也好,还是这个值也好,总之他们呢,都是都是一个值,各位啊,其实都是一个值。啊,都是一个值。你要不要把它特殊化,内存地址是不是一个值。内存地址是不是一个值,内存地址也是值,各位啊,也是一个值,也是盒子中保存的一个东西啊,也是盒子中保存的一个东西。
12:01
啊,它的它Java中只有一个语法规则啊,参数传递的时候传的是盒子里面保存的东西。啊,就Java中只有一个规定啊,就参数传递的时候,一定是将盒子中的,盒子中的东西复制一份传递过去。一定是这样的啊,一定是这样的。好,这个结果一个是一个是11啊。
我来说两句