资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,方法的参数传递,参数传递,参数传递分两种类型:,参数,按值传递,参数,按引用传递,参数按值传递参数类型?,class,TestMax,public static void,main(String,args,),int,i=5;,int,j=2;,int,num3=,max(i,j);,System.out.println(The,maximum is +num3);,static,int,max(int,num1,int,num2),if(num1 num2),return num1;,else,return num2;,i,和,j,是,实际参数,,简称,实参,num1,和,num2,是,形式参数,,简称,形参,参数按值传递,在调用带参数的方法时,参数的值,复制到,方法中称为,按值传递(,pass by value,),。,无论方法中的,形参怎么变化,,,实参并不会改变,!这是,参数按值传递,的最大特色!,我们看一个例子,TestPassByValue.java,,它,包含一个,static void,swap(int,n1,int,n2),方法,,该方法的功能是,交换数字,n1,和数字,n2,的数值,。,参数按值传递,/,交换,n1,、,n2,的数值;如,n1,等于,1,,,n2,等于,2,,,/,执行该方法,,n1,等于,2,,,n2,等于,1,static void,swap(int,n1,int,n2),int,temp=n1;,n1=n2;,n2=temp;,变量,temp,等于,n1,的数值,n1,等于,n2,的数值,n2,等于,temp,的数值,因为,temp,等于,n1,的数值,所以,n2,也就等于,n1,的数值,参数按值传递,public class,TestPassByValue,public static void,main(String,args,),int,num1=1;,int,num2=2;,swap(num1,num2);,System.out.println(“num1,等于”,+num1+“num2,等于,+num2);,static void,swap(int,n1,int,n2),int,temp=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),num1,num2,1,2,n1,n2,1,2,执行方法,swap,交换,2,1,1,n1,n2,temp,num1,num2,1,2,参数的引用传递,当一个方法的参数是对象或数组时,我们称这种传递方式为引用传递。,那么,什么是引用呢?,简单类型与引用,(,对象)类型,对简单类型变量来说,对应内存所存储的值是简单类型的,数值,。,对引用类型的变量来说,它的值是一个引用,是,对象的存储地址,。,Java,中的对象和数组都属于引用类型。,简单类型,int,i,1 i,1,对象类型,Circle c=new Circle(5)c,引用,c,:Circle,radius,=5,简单类型变量和对象类型变量的区别,变量赋值,简单类型变量,一个变量的,真实值,赋给另一个变量。,对于对象类型变量,一个变量的,引用,赋给另一个变量。,对象类型赋值,c1,c2,赋值前:赋值后:,引用,引用,c1,c2,c,:Circle,radius,=5,c,:Circle,radius,=9,引用,引用,c1,c2,关于引用和对象的一种通俗的解释:,引用和对象的关系,,可以想象成,电视遥控板(引用)和电视机(对象)的关系,。只要握住这个遥控板,就相当于掌握了与电视机连接的通道。一旦需要“换频道”或者“关小声音”,我们实际操纵的是遥控板(引用),再由遥控板自己操纵电视机(对象)。如果要在房间里四处走走,并想保持对电视机的控制,那么手上拿着的是遥控板,而非电视机。此外,即使没有电视机,遥控板亦可独立存在。也就是说,只是由于拥有一个引用,并不表示必须有一个对象同它连接。可创建一个,Circle,引用:,Circle c;,但这里创建的只是引用,并不是对象。这里,c,实际并未与任何东西连接(即“没有电视机”)。,c,new Circle,();,这样,c,引用和一个圆对象相连接。(遥控板和电视机连接),给方法传递对象,传递简单类型的变量和传递对象有重要区别,传递简单类型变量就是将其值传递给形参。改变方法内部的参数不会影响方法外部的变量值。这种传递称为,值传递,。,传递对象意味将对象的引用传递给形参。方法体内的局部对象的任何变化都会影响作为参数传递的原对象。这种传递称为,引用传递,。,以引用类型作为参数,假设有一个盒子类,Box,,定义如下:,public,class,Box,String color;,Box(String,color),this,.color,=color;,public,String,toString,(),return,color;,以引用类型作为参数,public,class,TestBox,static,void,changeColor(Box,b1),b1.color=green;,public,static,void,main(String,args,),Box,redBox,=,new,Box(red,);,System.,out,.println,(,红盒子是,+,redBox.color,+,色的。,);,changeColor,(redBox,);,System.,out,.println,(,红盒子是,+,redBox.color,+,色的。,);,调用了,changeColor,方法后,盒子的属性,color,被改变。,
展开阅读全文