《面向对象程序设计》第四章教学课件.ppt_第1页
《面向对象程序设计》第四章教学课件.ppt_第2页
《面向对象程序设计》第四章教学课件.ppt_第3页
《面向对象程序设计》第四章教学课件.ppt_第4页
《面向对象程序设计》第四章教学课件.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第四章 使用方法,学习目标: 方法的声明 方法调用 方法的参数传递和返回值 方法的重载,方法的概述,类由数据成员和方法组成。方法定义类对象的行为或动作,即对象可以执行的操作,是相对独立的程序模块。本章学习方法的声明和调用。,方法有两种:一种是标准方法,Java API提供了丰富的类和方法,这些方法提供了程序员所需的许多功能。另一种是用户自定义的方法,以解决用户专门需要。 Java应用程序中,程序的执行从main方法开始,调用其他方法后又回到main方法,在main方法中结束整个程序的运行。,一、方法声明,在Java程序中,方法只能在类中声明,格式如下: 修饰符 返回值类型 方法名 (参数表)

2、声明部分 语句部分 ,说明,(1)方法声明包括方法头和方法体两部分; (2)修饰符可以是:缺省,public、private、protected,见P85页; (3)类型标识符反映方法完成其功能后返回的运算结果的数据类型。如果方法没有返回值,用void指明; (4)方法名的命名要符合标示符的命名规则,不要与JAVA中的关键字重名; (5)方法不能嵌套; (6)有返回值的方法,其方法体中至少有语句:return(表达式); (7)参数表用以说明方法调用时应传递的参数的个数和数据类型,方法在运行时才给参数分配内存存储单元;,例4-1 定义计算平方的方法,static int square(int

3、x) int s; s=x*x; return (s); ,二、方法调用,1 方法表达式 对于有返回值的方法作为表达式或表达式的一部分来调用,其在表达式中出现的形式为: 方法名(实际参数表),例4-2 调用前面定义的方法,public class SquareC static int square(int x) int s; s=x*x; return (s); public static void main(String args) int n = 5; int result = square(n); System.out.println(result); ,例4-3 以方法语句方式调用方法

4、,class AreaC static void area(int a , int b ) int s; s = a * b; System.out.println(s); public static void main(String args) int x = 5; int y=3; area(x, y); ,2 方法语句,方法名(实际参数表) 即以独立语句的方式调用方法。 参数表的使用形式同方法表达式调用法。,例4-4 无参方法,class SumC static void sum( ) int i, j, s; i=3; j=6; s=i+j; System.out.println(s)

5、; public static void main(String args) sum( ); ,传递参数,将参数放在调用方法的括号内 传递字面值或变量 按方法声明中的顺序列出参数 参数的传递是以传值的方式进行:即将实际参数的值传递给形式参数,而不是将实际参数的地址传递给形式参数;因此当被调用的方法改变形式参数的值时,并不改变实际参数的值。,三、参数传递,例4-5 参数传递实例 public class Swaping static void swap(int x , int y ) int temp ; System.out.println(Before Swapping); System.o

6、ut.println(x= +x+ y= +y); temp = x; x = y; y = temp; System.out.println(After Swapping); System.out.println(x= +x+ y= +y); ,例4-5 参数传递实例(续),public static void main(String args) int u=23 , v=100; System.out.println(Before Calling); System.out.println(u= +u+ v= +v); swap(u, v); System.out.println(After

7、 Calling); System.out.println(u= +u+ v= +v); ,例4-5 参数传递实例(续),输出结果如下所示: Before Calling u= 23 v= 100 Before Swapping x= 23 y= 100 After Swapping x= 100 y= 23 After Calling u= 23 v= 100,四、递归,所谓递归就是用自身的结构来描述自身,最典型的例子是对阶乘运算。,例4-6:采用递归算法求n!。,递归定义: fac(n)=1 n=1 n*fac(n-1),递归算法程序,class Factorial static long

8、 fac( int n ) if (n= =1 ) return 1; else return n*fac(n-1); ,递归算法程序(续),public static void main(String args) int k ; long f; k=Integer.parseInt(args0); f=fac(k); System.out.println(f); ,递归调用过程如下所示:,递归级别 执行操作 0 fac(5) 1 fac(4) 2 fac(3) 3 fac(2) 4 fac(1) 4 返回1 fac(1) 3 返回2 fac(2) 2 返回6 fac(3) 1 返回24 fa

9、c(4) 0 返回120 fac(5),例:梵塔(Hanoi)问题,据古印度神话,在贝拿勒斯的圣庙里安放着一块铜板,板上有3根宝石针。梵天(印度教的主神)在创造世界的时候,在其中的一根针上摆放了由小到大共64片中间有空的金片。无论白天和黑夜,都有一位僧侣负责移动这些金片。移动金片的规则是:一次只能将一个金片移动到另一根针上,并且在任何时候以及任意一根针上,小片只能在大片的上面。当64个金片全部由最初的那根针上移动到另一根针上时,这世界就在一声霹雳中消失。,假定用A、B和C分别表示3根针,可以看到,要将n个金片由A针移动到C针,可以分解为以下几个步骤: 将A上的n-1个金片借助C针移动到B针上。

10、 将A针上剩下的一个金片由A针移动到C针上。 将最后剩下的n-1个金片借助A针由B针移动到C针上。 步骤(1)和(3)与整个任务类似,但涉及的金片只有n-1个,是一个典型的递归算法。,class HanoiTower static void moves( char a , char c ) System.out.println(From + a + To + c); static void hanoi( int n , char a , char b , char c ) if (n = = 1) moves(a, c); else, hanoi(n - 1, a, c, b); moves(

11、a, c); hanoi(n - 1, b, a, c); public static void main(String args) int n ; n = Integer.parseInt(args0); hanoi(n, A, B, C); ,运行程序时,为变量n输入值3,运行结果如下所示。 From A To C From A To B From C To B From A To C From B To A From B To C From A To C,使用方法的优点,要求对象做某一事情 精确地定义对象可以做什么 获取和设置值 使程序的可读性更好而且更易维护 使开发和维护更快捷 可重复

12、使用软件,操作方法和调用方法,public class AllInMain public static void main(String args) int int1=42; int int2=24; System.out.println(int1+int2); 这种方法是简洁的,但是它: 在较大的应用程序中是不现实的 没有使用面向对象的思想 还有其它缺点,操作方法和调用方法,调用方法让对象用它的一个方法来为你做某件事情。 调用方法除调用操作方法外,通常还有普通的方法操作 对象的调用方法可以为您: 获得输入信息 返回一条信息,调用方法,特别是从不同的方法中调用方法 调用方法暂停,操作方法接着执

13、行 调用方法从它调用操作方法的调用点后继续执行 调用方法和操作方法可以在同一个类中或在不同的类中 可以按任何顺序调用方法,接收返回值,返回值返回到代码中调用它时所在的位置 mathRef.add(2,4); 调用了方法的表达式等于返回值 使用返回值时,可以将调用和返回值的使用在同一行内完成 int addedNumbers=mathRef.add(2,4);,方法体中如果指定了非void的返回值类型,方法中就必须包含一条return语句保证任何情况下都有返回值,return语句之后不能跟任何表达式;,查看结果:BoxDemo4.java,对象方法和Static(静态)方法,对象方法需要创建一个

14、对象 静态方法的运行可以没有对象 这些方法与类相关,但又不对与某一特定对象关联的变量进行操作,static方法是属于整个类的,而不是属于某个实例(具体的对象)。 而对象方法属于每个实例,只能在类的实例和子类的实例中调用。,static静态变量,当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实质上的对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。 我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份,例如所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的

15、实例对象中都单独分配一个用于代表国家名称的变量。,查看结果:TestChinese.java,static静态方法,在静态方法里只能直接调用同类中其它的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。 main() 方法是静态的,因此JVM在执行main方法时不创建main方法所在的类的实例对象,因而在main()方法中,我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员。,理解main方法的语法,由于java虚拟机需要调用类

16、的main()方法,所以该方法的访问权限必须是public,又因为java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static的,该方法接收一个String类型的数组参数,该数组中保存执行时传递给所运行的类的参数。,对象方法,Static静态方法的调用方式:类名.方法名 如:方法Math.random()和Integer.parseInt()是直接用类名进行访问。,static 方法,何时声明静态方法,在下列情况下将方法定义为静态的: 在哪一个对象上执行操作并不是很重要 方法的操作必须在实例化对象之前运行 方法履行的职责在逻辑上不属于一个对象,方法重载,有些方法执行同样的任务

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论