黑马程序员技术交流社区
标题:
参数的传递
[打印本页]
作者:
李迪
时间:
2011-7-26 20:47
标题:
参数的传递
参数的传递这点有点不太明白,他是实参与形参的结合问题,举个形参的例子,以及参数传递的例子,在代码中实参与形参标明。
作者:
匿名
时间:
2011-7-26 20:50
标题:
回复 楼主 的帖子
形参是你定义方法时约定的参数类型,实参就是你实际传递过来的参数。[code]private static int paramater(int a){ //这里a为形参
return a;
}
public static void main(String[] args) {
paramater(12); //这里12是实参
}[/code]
作者:
那日苏
时间:
2011-7-26 23:19
[code=java]public class Demo{
int x=0;
int y=0;
int getSum(int x,int y){ //x,y为形参
int sum=x+y;
System.out.println(sum);
return sum;
}
public static void main(String[] args) {
Demo d=new Demo();
d.getSum(2,5); //这里的2和5是实参
}
}[/code]
作者:
匿名
时间:
2011-7-27 00:24
标题:
代码参见上面2位,给点思路
形参就是一个模型,就像我们铸零件一样,先要有一个模具,然后把铁熔化了,放在模具里,一冷却便会成为我们想要的零件,当然我们也可以把铝熔化倒在里面冷却。那么这形参就是这个模具,它提供了一种解决问题的方法模型,而实参就是这倒进去冷却的物质,是解决问题的原材料,形参一旦定义就是确定的,可以把各种符合条件的实参传递给它,这就像不同的物质都可以放在模具里铸零件一样!所谓的符合条件无非就是说实参和形参之间要保持类型的一致!!
代码参见上面2位,给点思路
作者:
杨志罡
时间:
2011-7-27 01:50
标题:
回复 沙发 的帖子
大胆猜测,这位混江湖比较久,不是一处看到了,代码比较老练,简单,明了,正中要领
[
本帖最后由 杨志罡 于 2011-07-27 01:51 编辑
]
作者:
匿名
时间:
2011-7-27 07:01
[code]public class VarableParameter {
public static void main(String[] args){
System.out.println(add(2,3));//2和3为实参
System.out.println(add(2,3,5));//2,3和5为实参
}
public static int add(int x,int ... args){ //x和...args为形参
int sum=x;
for(int arg : args){
sum+=arg;
}
return sum;
}
}[/code]
作者:
匿名
时间:
2011-7-27 11:12
Java方法里面的参数传递方式只有一种:[color=Red]值传递---就是将实际参数值的副本(复制品)传入方法内,而参数本身是不会收到任何影响[/color]
例如如下程序[code=java]package cn.itcast.heima
public class TestPrimitiveTransfer
{
public static void swap(int a , int b)
{
//下面三行代码实现a、b变量的值交换。
//定义一个临时变量来保存a变量的值
int tmp = a;
//把b的值赋给a
a = b;
//把临时变量tmp的值赋给a
b = tmp;
System.out.println("swap方法里,a的值是" + a + ";b的值是" + b);
}
public static void main(String[] args)
{
int a = 5;
int b = 6;
swap(a , b);
System.out.println("交换结束后,实参a的值是" + a + ";实参b的值是" + b);
}
}[/code]运行上面程序可以看到[code=java]swap方法里,a的值是6;b的值是5
交换结束后,实参a的值是5;实参b的值是6[/code]从上面可以程序就说明了参数传递的机制,
1、Java总是从main方法开始执行的,main方法定义两个变量,他们在内存里面如下所示
[img]http://hi.csdn.net/attachment/201107/27/0_1311735288v9b9.gif[/img]
2、当程序开始执行swap方法时候,系统进入swap方法,讲main方法里面的两个变量作为参数传递到这个方法里面(是副本)如下所示
[img]http://hi.csdn.net/attachment/201107/27/0_1311735695hxHe.gif[/img]
3、这个时候系统存在两个栈区main方法和swap方法,分别保存他们的局部变量,main方法a,b作为参数传递到swap方法,但是swap方法栈区产生两个变量A,B,并且讲main方法的两个变量赋值给swap方法栈区的a,b阐述([color=Red]这个就是对形参进行初始化[/color]),且系统存在两个a变量,两个b变量,只不过存在不同的方法栈区
4、程序在swap方法交换两个a,b变量的时候,就是在swap方法栈区里面进行浇花,结束再输出a,b的值,如下所示
[img]http://hi.csdn.net/attachment/201107/27/0_1311736213IZId.gif[/img]
5、从上面图片可以看到main方法栈区的a,b变量没有任何改变,程序只是改变了swap方法栈区的a.b两个变量的值,[color=Red]这就是值传递的本质,系统开始执行方法的时候,系统为形参执行初始化,就是把实参变量的值付给方法的形参变量,方法里面的操作并不是实际的实参变量[/color]
作者:
匿名
时间:
2011-7-27 11:16
Java方法里面的参数传递方式只有一种:[color=Red]值传递---就是将实际参数值的副本(复制品)传入方法内,而参数本身是不会收到任何影响[/color]
例如如下程序[code=java]package cn.itcast.heima
public class TestPrimitiveTransfer
{
public static void swap(int a , int b)
{
//下面三行代码实现a、b变量的值交换。
//定义一个临时变量来保存a变量的值
int tmp = a;
//把b的值赋给a
a = b;
//把临时变量tmp的值赋给a
b = tmp;
System.out.println("swap方法里,a的值是" + a + ";b的值是" + b);
}
public static void main(String[] args)
{
int a = 5;
int b = 6;
swap(a , b);
System.out.println("交换结束后,实参a的值是" + a + ";实参b的值是" + b);
}
}[/code]运行上面程序可以看到[code=java]swap方法里,a的值是6;b的值是5
交换结束后,实参a的值是5;实参b的值是6[/code]从上面可以程序就说明了参数传递的机制,
1、Java总是从main方法开始执行的,main方法定义两个变量,他们在内存里面如下所示
[img]http://hi.csdn.net/attachment/201107/27/0_1311735288v9b9.gif[/img]
2、当程序开始执行swap方法时候,系统进入swap方法,讲main方法里面的两个变量作为参数传递到这个方法里面(是副本)如下所示
[img]http://hi.csdn.net/attachment/201107/27/0_1311735695hxHe.gif[/img]
3、这个时候系统存在两个栈区main方法和swap方法,分别保存他们的局部变量,main方法a,b作为参数传递到swap方法,但是swap方法栈区产生两个变量A,B,并且讲main方法的两个变量赋值给swap方法栈区的a,b阐述([color=Red]这个就是对形参进行初始化[/color]),且系统存在两个a变量,两个b变量,只不过存在不同的方法栈区
4、程序在swap方法交换两个a,b变量的时候,就是在swap方法栈区里面进行浇花,结束再输出a,b的值,如下所示
[img]http://hi.csdn.net/attachment/201107/27/0_1311736213IZId.gif[/img]
5、从上面图片可以看到main方法栈区的a,b变量没有任何改变,程序只是改变了swap方法栈区的a.b两个变量的值,[color=Red]这就是值传递的本质,系统开始执行方法的时候,系统为形参执行初始化,就是把实参变量的值付给方法的形参变量,方法里面的操作并不是实际的实参变量[/color]
[color=Red]最后对于引用类型的参数的传递,一样也是采用的值的传递方式,唯一的不同点就是,他们和基本类型的变量在内存里面的保存方式不同,引用类型的变量保存的是对象的引用,当把这个引用的值传给其他变量的时候,其他变量也就指向了实际的对象,当操作这个对象的时候就是对实际的对象的操作,它是通过引用来直接关联对象的,传递的不是直接的对象,而是指向这个对象的引用,各位麻油可以自己画图试试[/color]
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2