A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李迪 黑马帝   /  2011-7-26 20:47  /  2388 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

参数的传递这点有点不太明白,他是实参与形参的结合问题,举个形参的例子,以及参数传递的例子,在代码中实参与形参标明。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

7 个回复

倒序浏览
黑马网友  发表于 2011-7-26 20:50:50
沙发

回复 楼主 的帖子

形参是你定义方法时约定的参数类型,实参就是你实际传递过来的参数。[code]private static int paramater(int a){        //这里a为形参
                return a;
        }
        public static void main(String[] args) {
                paramater(12);        //这里12是实参
        }[/code]

评分

参与人数 1技术分 +2 收起 理由
admin + 2 对的!

查看全部评分

回复 使用道具 举报
[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]

评分

参与人数 1技术分 +2 收起 理由
admin + 2 赞同

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-27 00:24:36
板凳

代码参见上面2位,给点思路

形参就是一个模型,就像我们铸零件一样,先要有一个模具,然后把铁熔化了,放在模具里,一冷却便会成为我们想要的零件,当然我们也可以把铝熔化倒在里面冷却。那么这形参就是这个模具,它提供了一种解决问题的方法模型,而实参就是这倒进去冷却的物质,是解决问题的原材料,形参一旦定义就是确定的,可以把各种符合条件的实参传递给它,这就像不同的物质都可以放在模具里铸零件一样!所谓的符合条件无非就是说实参和形参之间要保持类型的一致!!

代码参见上面2位,给点思路
回复 使用道具 举报

回复 沙发 的帖子

大胆猜测,这位混江湖比较久,不是一处看到了,代码比较老练,简单,明了,正中要领
[ 本帖最后由 杨志罡 于 2011-07-27  01:51 编辑 ]
回复 使用道具 举报
黑马网友  发表于 2011-7-27 07:01:43
地板
[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:37
7#
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:48
8#
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]
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马