让初学者理解方法的参数
2011-03-02 00:56
204 查看
我对参数的一些看法,给初学者看
2008-11-3日
近日看到学过Java第九章的同学们,都在讨论参数的用法是多么难以理解,不太好用。以下是本人的一点见解,希望对各位同学理解程序中的参数有所帮助。
大家学到参数感觉难、感觉难以理解,这是我所意料到的。因为就往年的学生学到参数,一开始大都一知半解,不能完全的弄明白。也有好多学生直接问我,“参数咋就那么难学呢?”。我给他们的答案是,首先不要灰心,这是学习程序的一个必经阶段,往年我在教学过程中,大部分学生刚刚接触参数都不太理解,都要经过一个从恍然大糊涂到恍然大悟的过程,我经常给我的学生说举例子,这就像我们小学学习拼音一样,有谁可以一开始学就完全掌握了拼音的呢?有那么一个坎,一但我们跨过去了,就会有一种恍然大悟的感觉,回过头来再看拼音,原来拼音是如此的简单。所以说现在参数困绕了好过刚刚学过javaT9的学生,你们现在就要通过多练多体会来跨过程序中参数的坎。几乎没有S2、Y2的学生再说参数不理解吧?
好了,言归正传。先给大家举个例子,比如张三肚子饿了,肚子饿了肯定是想要吃东西了。吃苹果可以不可以饱?吃馒头可不可以饱?吃大米呢?都可以吃饱。可以把胃看作是一个想法,一但饿了,胃就要想要外界的食物,注意是要食物,如果给它食物以外的东西它是不要的,对吧?所以我们可以把胃看作一个方法,这个方法要是想工作(执行),就必须有食物,那么食物就是参数,所以你给胃木头可以吗?肯定不可以的,因为胃要的是食物,而木头不属于食物,所以参数是有类型要求的,也就是在给方法参数的时候不能随便给,要看方法要的是什么类型的东西,胃要的是食物?
好了,下面来点实战的。下面都是代码片段。所以大家不要直接拿来运行(我不再区别大小写了,因为Word在编辑的时候会改变一些字母的大小写状态,所以大家在运行的时候请做适当修改),代码是c#代码,Java类似。
class Program
{
static void DoubleTest()
{
}
static void Main(string[] args)
{
int Number;
}
}
我们看到定义了一个Main方法和一个DoubleTest方法,我在Main方法中定义了一个整型变量Number,现在在DoubleTest方法中写如下代码,大家认为对吗?
static void DoubleTest()
{
int DoubleNum = Number * 2; //此行会报错
}
显然,DoubleTest方法中的语句是错误的,因为Number是在Main方法中定义的私有变量,他的生命周期为从定义开始,到其所在的大括号结束为止。所以在DoubleTest方法中是没有办法访问到Main方法中的Number变量的。如果我们还想让DoubleTest使用Number变量,除了把Number定义为全局变量,还有一种方法就是传参。我们可以修改一下代码:
static void DoubleTest(int num)
{
int DoubleNum = num* 2;
}
static void Main(string[] args)
{
int Number;
DoubleTest(Number);
}
我们可以看到,在Main方法中调中了DoubleTest方法,而在调用时,把Main中的变量Number做为参数传给了DoubleTest中的num,这样相当于执行了一个num=Number的操作,在DoubleTest中使用num就相关于使用Main方法中的Number了。这就是传递参数要达到的效果。
我们来总结一下什么时候要使用参数,我们叫Main方法为调用方法,叫DoubleTest方法为被调用方法,当被调用方法想要使用调用方法中的私有变量时,被调用方法无法直接访问调用方法中的私有变量,所以我们可以采用传参数的方式把调用方法中的私有变量传递给被调用方法使用。
好,我们来继续,在上面的例子中,假如在Main方法中调用完DoubleTest方法后,要使用DoubleNum变量,可以使用吗?显示是不可以使用的。那么我们该怎么办呢?方法很简单,把DoubleNum返回就OK了。
static int DoubleTest(int num)
{
int DoubleNum = num* 2;
return DoubleNum;
}
static void Main(string[] args)
{
int Number;
int c = DoubleTest(Number);
}
由于DoubleTest方法返回一个int类型,所以在调用DoubleTest方法时需要定义一个int类型的变量来接收DoubleTest方法的返回值。上例中我们定义了变量c来接收DoubleTest的返回值。那么在Main方法中使用C就和使用DoubleTest中的DoubleNum是同样的效果了。所以我们可以说,当调用方法想要使用被调用方法中的值的时候,我们可以让调用方法通过返回值的形式来把被调用方法中的变量传给调用方法。
上面我们简单讲了一下什么时候应该使用参数什么时候应该使用返回值。写成文字总觉得有点别扭,不能把自己的想法表达出来。所以此文过两天还是录成有声视频给大家再讲一下吧。有机会的话再给大家举一些实例来讲解一下参数的具体应用,同时也希望大家把你自己如何理解参数的想法和大家分享一下(未完,待续)。
上文希望对各位有所帮忙。
2008-11-3日
近日看到学过Java第九章的同学们,都在讨论参数的用法是多么难以理解,不太好用。以下是本人的一点见解,希望对各位同学理解程序中的参数有所帮助。
大家学到参数感觉难、感觉难以理解,这是我所意料到的。因为就往年的学生学到参数,一开始大都一知半解,不能完全的弄明白。也有好多学生直接问我,“参数咋就那么难学呢?”。我给他们的答案是,首先不要灰心,这是学习程序的一个必经阶段,往年我在教学过程中,大部分学生刚刚接触参数都不太理解,都要经过一个从恍然大糊涂到恍然大悟的过程,我经常给我的学生说举例子,这就像我们小学学习拼音一样,有谁可以一开始学就完全掌握了拼音的呢?有那么一个坎,一但我们跨过去了,就会有一种恍然大悟的感觉,回过头来再看拼音,原来拼音是如此的简单。所以说现在参数困绕了好过刚刚学过javaT9的学生,你们现在就要通过多练多体会来跨过程序中参数的坎。几乎没有S2、Y2的学生再说参数不理解吧?
好了,言归正传。先给大家举个例子,比如张三肚子饿了,肚子饿了肯定是想要吃东西了。吃苹果可以不可以饱?吃馒头可不可以饱?吃大米呢?都可以吃饱。可以把胃看作是一个想法,一但饿了,胃就要想要外界的食物,注意是要食物,如果给它食物以外的东西它是不要的,对吧?所以我们可以把胃看作一个方法,这个方法要是想工作(执行),就必须有食物,那么食物就是参数,所以你给胃木头可以吗?肯定不可以的,因为胃要的是食物,而木头不属于食物,所以参数是有类型要求的,也就是在给方法参数的时候不能随便给,要看方法要的是什么类型的东西,胃要的是食物?
好了,下面来点实战的。下面都是代码片段。所以大家不要直接拿来运行(我不再区别大小写了,因为Word在编辑的时候会改变一些字母的大小写状态,所以大家在运行的时候请做适当修改),代码是c#代码,Java类似。
class Program
{
static void DoubleTest()
{
}
static void Main(string[] args)
{
int Number;
}
}
我们看到定义了一个Main方法和一个DoubleTest方法,我在Main方法中定义了一个整型变量Number,现在在DoubleTest方法中写如下代码,大家认为对吗?
static void DoubleTest()
{
int DoubleNum = Number * 2; //此行会报错
}
显然,DoubleTest方法中的语句是错误的,因为Number是在Main方法中定义的私有变量,他的生命周期为从定义开始,到其所在的大括号结束为止。所以在DoubleTest方法中是没有办法访问到Main方法中的Number变量的。如果我们还想让DoubleTest使用Number变量,除了把Number定义为全局变量,还有一种方法就是传参。我们可以修改一下代码:
static void DoubleTest(int num)
{
int DoubleNum = num* 2;
}
static void Main(string[] args)
{
int Number;
DoubleTest(Number);
}
我们可以看到,在Main方法中调中了DoubleTest方法,而在调用时,把Main中的变量Number做为参数传给了DoubleTest中的num,这样相当于执行了一个num=Number的操作,在DoubleTest中使用num就相关于使用Main方法中的Number了。这就是传递参数要达到的效果。
我们来总结一下什么时候要使用参数,我们叫Main方法为调用方法,叫DoubleTest方法为被调用方法,当被调用方法想要使用调用方法中的私有变量时,被调用方法无法直接访问调用方法中的私有变量,所以我们可以采用传参数的方式把调用方法中的私有变量传递给被调用方法使用。
好,我们来继续,在上面的例子中,假如在Main方法中调用完DoubleTest方法后,要使用DoubleNum变量,可以使用吗?显示是不可以使用的。那么我们该怎么办呢?方法很简单,把DoubleNum返回就OK了。
static int DoubleTest(int num)
{
int DoubleNum = num* 2;
return DoubleNum;
}
static void Main(string[] args)
{
int Number;
int c = DoubleTest(Number);
}
由于DoubleTest方法返回一个int类型,所以在调用DoubleTest方法时需要定义一个int类型的变量来接收DoubleTest方法的返回值。上例中我们定义了变量c来接收DoubleTest的返回值。那么在Main方法中使用C就和使用DoubleTest中的DoubleNum是同样的效果了。所以我们可以说,当调用方法想要使用被调用方法中的值的时候,我们可以让调用方法通过返回值的形式来把被调用方法中的变量传给调用方法。
上面我们简单讲了一下什么时候应该使用参数什么时候应该使用返回值。写成文字总觉得有点别扭,不能把自己的想法表达出来。所以此文过两天还是录成有声视频给大家再讲一下吧。有机会的话再给大家举一些实例来讲解一下参数的具体应用,同时也希望大家把你自己如何理解参数的想法和大家分享一下(未完,待续)。
上文希望对各位有所帮忙。
相关文章推荐
- 深入理解Java方法调用的参数传递
- Objective-C中一个方法如何传递多个参数的理解
- 波哥学java, 5.10.3 理解main()方法 String[] args的使用 向 java 中传递参数
- 对Java方法参数按值传递的理解
- 【Android】Bitmap类getPixels()方法中参数stride理解
- 理解 Delphi 的类(十一) - 深入类中的方法[3] - 方法在实现时的参数省略
- 【转载】理解可变参数va_list、va_start、va_arg、va_end原理及使用方法
- Java中方法参数传递----传值与传引用的理解
- 工厂方法--初学者理解
- 初学者对于静态方法与非静态方法的理解
- 理解可变参数va_list、va_start、va_arg、va_end原理及使用方法
- 理解 Delphi 的类(十) - 深入方法[21] - 开放数组参数
- 工厂方法【Factory Method】模式---初学者理解
- filter多个参数处理方法+Python的filter过滤器理解
- Bitmap类getPixels()方法中参数stride理解
- 理解 Delphi 的类(十) - 深入方法[22] - 指针参数
- Objective-C中一个方法如何传递多个参数的理解
- Bitmap类getPixels()方法中参数stride理解
- 深入理解 c# 第五章 使用了忽略参数的匿名方法来订阅事件
- 深入理解Java中方法的参数传递机制