Java程序设计基础 课件 第4章 方法_第1页
Java程序设计基础 课件 第4章 方法_第2页
Java程序设计基础 课件 第4章 方法_第3页
Java程序设计基础 课件 第4章 方法_第4页
Java程序设计基础 课件 第4章 方法_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

第4章

方法1教学目标(1) 理解方法的概念,掌握方法的定义方式和组成。(2) 理解方法调用的概念和工作原理。(3) 理解方法调用时的按值传递工作原理,能定义简单方法并调用。(4) 理解方法重载的概念,能定义和调用重载方法。(5) 理解方法中局部变量的作用域,弄清方法中变量的有效作用范围。(6) 理解模块化编程思想。(7) 能使用方法对简单问题进行模块化求解,如:求π值、输出素数、十进制和十六进制的相互转换。2内容334.1方法定义4.2方法调用4.3按值传递4.4方法重载4.5变量的作用域4.6模块化编程4.7示例学习内容444.1方法定义4.2方法调用4.3按值传递4.4方法重载4.5变量的作用域4.6模块化编程4.7示例学习4.1方法定义问题:假设需要分别求出从1到10、从20到30、从35到45的整数和。51.引言4.1方法定义6intsum=0;for(inti=1;i<=10;i++)sum+=i;System.out.println("Sumfrom1to10is"+sum);sum=0;for(inti=20;i<=30;i++)sum+=i;System.out.println("Sumfrom20to30is"+sum);sum=0;for(inti=35;i<=45;i++)sum+=i;System.out.println("Sumfrom35to45is"+sum);解决方式17intsum=0;for(inti=1;i<=10;i++)sum+=i;System.out.println("Sumfrom1to10is"+sum);sum=0;for(inti=20;i<=30;i++)sum+=i;System.out.println("Sumfrom20to30is"+sum);sum=0;for(inti=35;i<=45;i++)sum+=i;System.out.println("Sumfrom35to45is"+sum);4.1方法定义解决方式1有什么问题8publicstaticintsum(inti1,inti2){intsum=0;for(inti=i1;i<=i2;i++)sum+=i;returnsum;}publicstaticvoidmain(String[]args){System.out.println("Sumfrom1to10is"+sum(1,10));System.out.println("Sumfrom20to30is"+sum(20,30));System.out.println("Sumfrom35to45is"+sum(35,45));}4.1方法定义解决方式2:定义方法方法对于促进代码复用和提高开发效率具有重要价值4.1方法定义方法(method):为完成一个操作而组合在一起的语句组。方法的定义由方法头(methodhead)以及方法体(methodbody)构成。方法头:方法名称、参数、返回值类型9定义方法的一般语法形式:[修饰符]返回值类型方法名(参数列表){ //方法体;

语句组[return返回值]}4.1方法定义方法(method):为完成一个操作而组合在一起的语句组。方法的定义由方法头(methodhead)以及方法体(methodbody)构成。方法头:方法名称、参数、返回值类型10定义方法的一般语法形式:[修饰符]返回值类型方法名(参数列表){ //方法体;

语句组[return返回值]}修饰符:该项是可选项,用于声明方法的访问范围、类型,可以使用的关键字有:public、private、protected、static和final等4.1方法定义方法(method):为完成一个操作而组合在一起的语句组。方法的定义由方法头(methodhead)以及方法体(methodbody)构成。方法头:方法名称、参数、返回值类型11定义方法的一般语法形式:[修饰符]返回值类型方法名(参数列表){ //方法体;

语句组[return返回值]}返回值类型:声明方法返回值的数据类型,可以是基本数据类型int、float或boolean等,也可以是数组、对象等引用数据类型,方法体内的return语句要返回相应类型的数值4.1方法定义方法(method):为完成一个操作而组合在一起的语句组。方法的定义由方法头(methodhead)以及方法体(methodbody)构成。方法头:方法名称、参数、返回值类型12定义方法的一般语法形式:[修饰符]返回值类型方法名(参数列表){ //方法体;

语句组[return返回值]}方法名:方法名是一个合法的标识符,用于标识所声明的方法4.1方法定义方法(method):为完成一个操作而组合在一起的语句组。方法的定义由方法头(methodhead)以及方法体(methodbody)构成。方法头:方法名称、参数、返回值类型13定义方法的一般语法形式:[修饰符]返回值类型方法名(参数列表){ //方法体;

语句组[return返回值]}参数列表:参数列表是由0个或多个变量声明(数据类型变量名称)构成,多个变量声明之间用逗号分隔(,)形参(formalparameter)实参(actualparameter)方法名和参数列表构成了一个方法的方法签名(methodsignature)4.1方法定义方法(method):为完成一个操作而组合在一起的语句组。方法的定义由方法头(methodhead)以及方法体(methodbody)构成。方法头:方法名称、参数、返回值类型14定义方法的一般语法形式:[修饰符]返回值类型方法名(参数列表){ //方法体;

语句组[return返回值]}return语句:如果方法返回值类型是void,那么可以不用return语句,或者采用“return;”形式的return语句。如果方法有返回值,那么必须使用return语句返回相应数据类型的值,返回语句的一般形式为“return返回值;”。154.1方法定义定义一个方法示例164-1一个方法的签名包括()方法名方法名和参数列表返回值类型,方法名和参数列表参数列表ABCD提交单选题1分174-2当创建的方法不需要返回任何值时,需要采用以下哪个关键字作为返回值类型?()nonenullvoiddoubleABCD提交单选题1分内容18184.1方法定义4.2方法调用4.3按值传递4.4方法重载4.5变量的作用域4.6模块化编程4.7示例学习4.2方法调用方法是一个定义好的功能模块,为了使用方法完成相应的功能,必须调用它。方法调用就是传递参数给方法,然后执行方法中的代码,有两种调用方式:对于带返回值方法的调用,方法调用可以被作为一个值来处理。对于不存在返回值的方法调用,即void方法,方法调用必须是一条语句。需要注意的是,对带返回值方法的调用也可以单独作为一条语句,忽略其返回值即可。这种用法很少用,但是也是允许的当程序调用一个方法时,程序控制转移到被调用的方法。当执行完return语句或执行到表示方法结束的右括号时,被调用的方法将程序控制返还给调用者。示例:程序清单4-1TestMinMethod.java194.2方法调用204.2方法调用活动记录:当一个方法被调用时,系统会在内存中为该方法创建一个活动记录,用于保存该方法的参数和变量调用栈:在内存中存储活动记录的一个区域调用栈是以先进后出的方式管理方法的活动记录,即,最后被调用的方法的活动记录最早从调用栈中被清除,最早执行的方法的活动记录最晚被清除调用栈变化示例(下页图)214.2方法调用22警告23对带返回值的方法而言,return语句是必需的。下图(a)中的方法逻辑上是正确的,但它有编译错误。因为Java编译器认为该方法有可能不返回任何值。为了解决这个问题,删除图(a)

if(n<0),这样,编译器将发现不管if语句如何执行,总可以执行到return语句。2.方法定义与调用244-3“对返回类型为void的方法的调用本身总是一条语句,但是对带返回值类型的方法的调用本身不能做为一条语句。“这句话是否正确()正确错误AB提交单选题1分254-4在void方法中可以有return语句吗?()可以不可以AB提交单选题1分内容26264.1方法定义4.2方法调用4.3按值传递4.4方法重载4.5变量的作用域4.6模块化编程4.7示例学习4.3按值传递当调用一个方法时,需要提供与该方法参数列表中形参相匹配的实参:实参必须与方法签名中定义的形参在顺序上和数量上匹配,在类型上兼容。类型兼容是指实参的值不需要强制类型转换(可以隐式类型转换)就可以传递给形参。例如:形参是double类型,实参可以是float、int等类型按值传递(pass-by-value):当调用一个带参数的方法时,将实参的值传递给形参的过程当方法的形参类型是基本数据类型时,实参既可以是类型兼容的字面值,也可以是类型兼容的变量例如:形参是double类型,实参可以是字面值:2,2.5,3.5f等,也可以是一个int型变量或float型变量或double型变量当实参是变量时,实参的值会传递给形参;然后,形参的变化与实参无关274.3按值传递28示例:程序清单4-2TestPassByValue.java4.3按值传递实参按顺序匹配示例:程序清单4-3TestPassOrder.java29课堂讨论inti=10;floatf=4.5f;doubled=36.5;30下列哪些类型转换是正确的:i=f;f=i;i=d;d=f;FalseTrueFalseTrue针对方法:max(inti,inty),

max(inti,floatj),max(doubled1,doubled2)下列调用对应哪个方法?max(i,f);max(i,d);max(f,d);类型兼容的匹配314-5给定一个方法:publicstaticvoidm(doubled,inti),下列哪个选项是不合法调用()m(2.3,2)m(2,2)m(2d,2)m(2.3,2.3)ABCD提交单选题1分内容32324.1方法定义4.2方法调用4.3按值传递4.4方法重载4.5变量的作用域4.6模块化编程4.7示例学习4.4方法重载方法重载(methodoverloading)是指可以使用相同的方法名来定义不同的方法,只要这些方法的参数列表是不同换一种说法,方法重载就是定义方法名相同的一些方法,而这些方法的方法签名不同方法重载可以减轻程序员的命名负担,提升程序的易读性示例:程序清单4-4SumMethodOverloading.java精确匹配:实参与参数列表中的形参在次序和数量上匹配,在类型上一致类型兼容的匹配:实参与参数列表中的形参在次序和数量上匹配,在类型上兼容Java编译器优先考虑精确匹配,然后考虑类型兼容的匹配33课堂讨论下面的程序有什么错误?34publicclassMain{publicstaticvoidmethod(inti){

}

publicstaticintmethod(intx){

returnx;

}

}4.4方法重载当调用一个方法,有两个或更多可能的匹配时,编译器无法判断哪个是最精确的匹配。这时就出现歧义调用,产生编译错误。示例:程序清单4-5AmbiguousInvokeDemo.java35课堂讨论给定两个方法定义:publicstaticdoublem(doublex,doubley)publicstaticdoublem(intx,doubley)对于下面的语句,两个方法中的哪个被调用?doublez=m(4,5);doublez=m(4,5.4);doublez=m(4.5,5.4);365.重载方法4.4方法重载小结:(1)重载方法的区分,与返回值类型无关,只与方法名和参数列表有关。(2)重载方法的参数列表必须不同,包括:参数数量不同,参数类型不同和参数顺序不同。(3)重载方法的区分,与形参名称无关。例如,sum(intnum1,intnum2)与sum(intnum3,intnum4)在Java编译器看来,是相同的方法,不能重复定义。37384-6已知方法的定义形式为:publicvoidplus(inta,intb){},下列选项中哪个是合法的重载方法?publicintplus(inta){}publicintplus1(intm,intn){}publicvoidplus(inta,intb){}publicintplus(inta,intb){}ABCD提交单选题1分内容39394.1方法定义4.2方法调用4.3按值传递4.4方法重载4.5变量的作用域4.6模块化编程4.7示例学习4.5变量的作用域一个变量的作用域是指该变量在程序中能被引用的范围。一个变量在其作用域之外被引用,Java编译器会报告编译错误。局部变量是在方法内部或语句块内部定义的变量。一个局部变量的作用域是从该变量声明的地方开始,直到包含该变量的语句块结束为止。局部变量在使用之前必须声明和初始化,局部变量没有默认赋值。40414-7方法内部定义的变量称为()全局变量方法变量形式参数局部变量ABCD提交单选题1分4.5变量的作用域42局部变量作用域示例课堂讨论43for(inti=0;i<10;i++){//…}System.out.println(i);6.变量作用域4.5变量的作用域44可以在一个方法的不同语句块中声明同名的局部变量,但是不能在嵌套块中或同一块中两次声明同一个局部变量publicstaticvoidmethod(){intx=0;inty=0;for(inti=1;i<10;i++){x+=i;}for(inti=1;i<10;i++){y+=i;}}45课堂讨论6.变量作用域publicstaticvoidmethod(){intx=0;inty=0;for(inti=1;i<10;i++){intx=1;x+=i;}}讨论:下面两段代码,存在错误吗(a)(b)内容46464.1方法定义4.2方法调用4.3按值传递4.4方法重载4.5变量的作用域4.6模块化编程4.7示例学习4.6模块化编程方法是模块化编程的重要构造,每个方法可以看成是一个模块。通过模块化,可以促进代码复用。辗转相除法求最大公约数和最小公倍数的示例:无模块化:程序清单4-6GCDTestDemo.java模块化:程序清单4-7GCDMethodDemo.java模块化后进行代码复用:程序清单4-8UseGCDMethodDemo.java474.6模块化编程通过模块化编程,方法的实现对用户而言是一个“黑盒子”,用户只需要知道方法的输入参数、返回值就可以使用它了如果需要对方法的实现进行修改,只要不改变方法签名,用户的程序就不受影响。484.6模块化编程通过使用方法进行模块化编程,能够更好地编写大型程序。逐步求精(分治思想):将大问题分解成多个子问题,每个子问题用一个方法实现,形成一个个小的、容易管理的模块。这些模块相互协作组合在一起,就形成了一个更大、更复杂、功能更强大的程序,从而解决复杂的大问题。JavaAPI也提供了一些通用功能模块供程序员使用,例如,Math类的数学函数方法49内容50504.1方法定义4.2方法调用4.3按值传递4.4方法重载4.5变量的作用域4.6模块化编程4.7示例学习4.7示例学习π值的计算可以使用下面的近似值计算公式:514.7.1求π值4.7.2输出素数4.7.3十/十六进制转换

模块化方法求解:程序清单4-9ComputePIMethod.java4.7示例学习对3.2.9节代码进行模块化编程:定义方法showPrimeNubmers:输出由参数numOfPrimes指定数量的素数定义方法isPrime:判断一个数是否素数main方法只有两行代码程序清单4-10PrimeMethodDemo.java524.7.1求π值4.7.2输出素数4.7.3十/十六进制转换4.7示例学习

534.7.1求π值4.7.2输出素数4.7.3十/十六进制转换4.7示例学习十进制转十六进制:算法设计:544.7.1

温馨提示

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

最新文档

评论

0/150

提交评论