第5章 方法 2012.ppt





《第5章 方法 2012.ppt》由会员分享,可在线阅读,更多相关《第5章 方法 2012.ppt(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、HSTCJava面向对象语言HSTC第5章 方法 方法定义调用方法 Void方法 传值参数 模块化代码 问题:十进制转换成十六进制 方法重载 变量的作用范围数学类举例:生成随机字符Method Abstraction and Stepwise RefinementHSTC方法介绍假设需要计算若干个十个数的和,如分别从1-10,从20-30,和从35到45的和,按之前我们的做法,代码书写如下。显然十分的麻烦,同时我们发现他们之间有些相似之处,仅仅是起始和终止的整数不同,其他都类似。我们写一个通用的代码是不是会更好?当然,我们可以定义一个方法,这个方法就是可以反复使用。基于此,代码进一步进行改写如
2、下。HSTC方法定义方法定义的语法如下:方法可以返回一个值,returnValueType是返回值的返回类型。可以不返回值,即returnValueType为void。如main方法就死void,不返回任何值。在方法头部定义的变量称为形式参数或简单参数。一个参数就如一个占位符,当一个方法被调用时,要传递一个值给这个参数,这个值称实际参数。参数列表指一个方法的参数的类型,顺序以及个数。参数是可选的,即一个方法可以没有参数,如Math.random()方法没有参数。如下的方法是找到两个整数中的较大者。因为这个方法要返回一个整数,因此要在语句中包含有return语句。其他编程语言中,方法被叫做过程或
3、函数,返回值的称函数,不返回值的称过程。在定义方法参数的时候要分别为每一个参数定义类型,如max(int num1,int num2),而不是max(int num1,num2)。HSTC调用方法定义好方法之后,还要使用方法,称方法调用。根据方法是否有返回值,有2种方式调用方法。对于有返回值的方法调用,通常以一个值来对待,如下对于返回void的方法,以一条语句来代替。如下例。注意:一个具有返回值的方法也可以被当做Java语句被调用,这种情况下会忽略返回值,只有当对返回值不敢兴趣的时候才可用。完整的程序如下。HSTC方法调用程序包含2个方法,main和max,其中main方法由JVM来调用,在m
4、ain方法的语句中,可用调用类定义的其他方法,也可以调用其他类定义的方法。如max方法和main定义在同一个类中,由类(或类生成对象)调用。方法(a)在逻辑上是正确的,但编译会出错,原因就是编译器任务程序可能会没有返回值。(b)是修改后的方法,这个方法是正确的,原因是编译器看到不管哪个if语句被执行都会有返回值。方法使得代码能够分享和重用,max方法可以在这个类以外的任意位置被调用。如TextMax.man(1,2);HSTC调用方法调用栈方法的每次调用,系统都会用内存中开辟的一块叫栈的空间来保持参数和变量的值。理解调用栈,对于我们理解方法和调用有很大的帮助。HSTCVoid 方法举例上述例子
5、给出了一个有返回值的方法,下面讲述如何定义和调用void方法。如下图。使用语句来调用void方法printGrade()。HSTC为了观察和返回值方法的不同,先把void方法进行改写getGrade(),如下。HSTCgetGrade方法可以在字符出现的任何位置被调用。而printGrade方法没有返回值,因此必须用语句调用。注意:虽然return语句没有必要用在void方法中,但它可以被用来终止方法并返回给方法的的掉用者。简单的语法为:return;这种做法并不是经常的,但对于在void方法中的进行控制流程很有用。如下代码,当分数非法时,方法会返回并终止执行。HSTC传值参数一个方法的强大是
6、因为它的参数,我们可以用println方法打印一个字符串,用max找到两个整数的最值。当调用一个方法时,我们需要提供实参,实参的顺序和类型等修饰必须和方法定义的形参对应,这叫做参数顺序结合。如下例打印n次信息的方法。我们可以用nPrintln(“Hello”,3);来打印Hello字符串3次,语句中“Hello”的值被传递给形式参数message,3被传递给形参整数n。但如果语句nPrintln(3,“Hello”);就会出错,因为3的类型没有和第一个形参message类型匹配,第二个参数也没能匹配。HSTC注意:实参必须按顺序,数量和兼容类型(如可以把int传给double)与形参匹配。当我
7、们调用方法时,实际参数的“值”传递给形式参数,我们称按值传递参数。即如果传递的实参是一个变量,把变量的值给形参,而不是把变量的地址传给形参,即使以后传递的参数在方法中被改变,也不会影响到实际参数的值。如下程序当中x(1)的值被传递给参数n,虽然之后n的值增加1,但x的值不受影响。HSTC但如下程序定义一个交换两个变量值的方法。通过传递2个实际参数值调用swap方法。HSTCHSTC模块化代码 方法可以简化代码,并能使代码重用。使用方法就是在编程过程中改善程序的质量并使得代码模块化。之前的求两个数最大公约数的程序,即提示用户输入2个整数并显示他们的最大公约数,我们用方法改写它,如下。HSTC上例
8、在gcd方法中封装了代码,使得程序有如下好处:计算最大公约数的程序从main方法中与其他代码分离出来,因此,逻辑上变得清晰和易读。计算最大公约数的程序如果有错误被限制在gcd方法中,缩小了调试程序的范围。gcd方法可以被其他程序使用。求前50个素数的例子,模块化以后,如下编写。HSTC十进制转换成十六进制 16进制数常被用在计算机系统程序中,下面我们要编写一个程序,把十进制数转换成16进制数。公式如下 们只需要得到这一系列的h就可以了。如图计算123的16进制数是7B的过程 HSTCHSTC方法重载 max方法只能用在整数上,如果计算2个浮点数的最大值就要再编写一个方法,这个方法具有相同的名字
9、max,但是参数的类型不同,如下代码。如果我们用整数参数调用max,则期待参数为int的方法会被调用,如果我们给出的参数是double类型则参数为double类型的max被调用。这就是方法的重载,即在一个类中,有2个方法,它们具有相同的名字,不同的参数列表。Java编译器会根据参数决定调用哪个方法。如下程序中包含3个重载的max方法。HSTCHSTC我们能否用一个int值和一个double值来调用max方法呢?如max(2,2.5),如果可以,哪个方法会被调用?第一个问题答案是肯定的,第二个问题是找到double参数的max方法,当无法找到精确匹配(int,double)的参数值时,会找到它兼
10、容的模式(double,double),因此参数2会被自动转换成double类型。注意:重载的方法必须有不同的参数列表。有时有2个以上的兼容匹配模式,但编译器不知道如何决定最合适的匹配,这就导致了含糊的调用,含糊的调用会导致编译错误。如下列代码。HSTC量的作用范围 变量的作用范围是程序中的变量在程序中被引用的范围。定义在方法内的变量称之为局部变量。局部变量的作用范围是从他声明开始到包含这个变量的语句块的结束部分。局部变量在使用前必须被声明并赋值。形式参数实际上就是局部参数,作用范围是整个方法。在for循环中初始化动作中的声明的变量的作用范围在整个循环中。但在for循环体中声明的变量作用范围从
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第5章 方法 2012

限制150内