方法的参数传递

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

方法的参数传递参数传递参数传递分两种类型:①参数按值传递②参数按引用传递参数按值传递-参数类型?classTestMax{publicstaticvoidmain(String[]args){inti=5;intj=2;intnum3=max(i,j);System.out.println(Themaximumis+num3);}staticintmax(intnum1,intnum2){if(num1num2)returnnum1;elsereturnnum2;}}i和j是实际参数,简称实参num1和num2是形式参数,简称形参参数按值传递•在调用带参数的方法时,参数的值复制到方法中称为按值传递(passbyvalue)。•无论方法中的形参怎么变化,实参并不会改变!!这是参数按值传递的最大特色!•我们看一个例子TestPassByValue.java,它包含一个staticvoidswap(intn1,intn2)方法,该方法的功能是交换数字n1和数字n2的数值。参数按值传递//交换n1、n2的数值;如n1等于1,n2等于2,//执行该方法,n1等于2,n2等于1staticvoidswap(intn1,intn2){inttemp=n1;n1=n2;n2=temp;}①变量temp等于n1的数值②n1等于n2的数值③n2等于temp的数值,因为temp等于n1的数值,所以n2也就等于n1的数值参数按值传递publicclassTestPassByValue{publicstaticvoidmain(String[]args){intnum1=1;intnum2=2;swap(num1,num2);System.out.println(“num1等于”+num1+“num2等于+num2);}staticvoidswap(intn1,intn2){inttemp=n1;n1=n2;n2=temp;System.out.println(“n1等于”+n1+“n2等于+n2);}}调用swap方法后,num1的还是等于1,num2的还是等于2,swap的执行对num1和num2的数值没有影响交换n1和n2的数值输出n1的数值等于2,n2的数值等于1实参的内容没有交换swap(num1,num2)按值传递swap(n1,n2)num1num212n1n212执行方法swap交换211n1n2tempnum1num212参数的引用传递•当一个方法的参数是对象或数组时,我们称这种传递方式为引用传递。•那么,什么是引用呢?简单类型与引用(对象)类型对简单类型变量来说,对应内存所存储的值是简单类型的数值。对引用类型的变量来说,它的值是一个引用,是对象的存储地址。Java中的对象和数组都属于引用类型。简单类型inti=1i1对象类型Circlec=newCircle(5)c引用c:Circleradius=5简单类型变量和对象类型变量的区别变量赋值简单类型变量,一个变量的真实值赋给另一个变量。对于对象类型变量,一个变量的引用赋给另一个变量。对象类型赋值c1=c2赋值前:赋值后:引用引用c1c2c:Circleradius=5c:Circleradius=9引用引用c1c2关于引用和对象的一种通俗的解释:引用和对象的关系,可以想象成电视遥控板(引用)和电视机(对象)的关系。只要握住这个遥控板,就相当于掌握了与电视机连接的通道。一旦需要“换频道”或者“关小声音”,我们实际操纵的是遥控板(引用),再由遥控板自己操纵电视机(对象)。如果要在房间里四处走走,并想保持对电视机的控制,那么手上拿着的是遥控板,而非电视机。此外,即使没有电视机,遥控板亦可独立存在。也就是说,只是由于拥有一个引用,并不表示必须有一个对象同它连接。可创建一个Circle引用:Circlec;但这里创建的只是引用,并不是对象。这里c实际并未与任何东西连接(即“没有电视机”)。c=newCircle();这样c引用和一个圆对象相连接。(遥控板和电视机连接)给方法传递对象传递简单类型的变量和传递对象有重要区别传递简单类型变量就是将其值传递给形参。改变方法内部的参数不会影响方法外部的变量值。这种传递称为值传递。传递对象意味将对象的引用传递给形参。方法体内的局部对象的任何变化都会影响作为参数传递的原对象。这种传递称为引用传递。以引用类型作为参数•假设有一个盒子类Box,定义如下:publicclassBox{Stringcolor;Box(Stringcolor){this.color=color;}publicStringtoString(){returncolor;}}以引用类型作为参数publicclassTestBox{staticvoidchangeColor(Boxb1){b1.color=green;}publicstaticvoidmain(String[]args){BoxredBox=newBox(red);System.out.println(红盒子是+redBox.color+色的。);changeColor(redBox);System.out.println(红盒子是+redBox.color+色的。);}}调用了changeColor方法后,盒子的属性color被改变。

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功