第4章声明和使用方法讲师:李贺飞本章内容第一节方法的声明和调用第二节参数的值传递第三节重载方法第一节方法的声明和调用方法声明和调用什么是方法(函数)?方法是类或对象行为特征的抽象,也称为函数。Java里的方法不能独立存在,所有的方法必须定义在类里。方法声明语法:修饰符返回值类型方法名(参数类型形参1,参数类型形参2,….){程序代码return返回值;}方法的返回类型•声明方法时,可以为其指定返回类型:–变量的数据类型–void(表示无返回值)•方法在执行后,需返回指定类型的值(void除外)–使用return语句返回值方法的参数列表•方法的参数列表中,可以含一到多个参数•调用方法时,参数的类型与数量需完全匹配•在方法签名中,参数也是局部变量方法的调用方法只有被调用才会被执行方法调用的过程分析方法的调用注意:没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。定义方法时,方法的结果应该返回给调用者,交由调用者处理。方法中只能调用方法,不可以在方法内部定义方法。练习1.编写程序,声明一个method方法,在方法中打印一个10*8的矩形,在main方法中调用该方法。练习1.修改上一个程序,在method方法中,除打印一个10*8的矩形外,再计算该矩形的面积,并将其作为方法返回值。2.在main方法中调用该方法,接收返回的面积值并打印练习1.修改上一个程序,在method方法提供m和n两个参数,方法中打印一个m*n的矩形,并计算该矩形的面积,将其作为方法返回值。2.在main方法中调用该方法,接收返回的面积值并打印。跨类调用方法•类中的某个方法,除了可以调用本类的其他方法外,还可以调用其他类中的指定方法。•为便于理解,本例暂时使用静态方法示例1publicclassTest2Class{2publicstaticvoidmain(String[]args){3intret=StaticClass.add(10,20);4System.out.println(ret=+ret);56intret2=StaticClass.add(15,25);7System.out.println(ret2=+ret2);8}9}1011publicclassStaticClass{12publicstaticintadd(inta,intb){13System.out.println(a=+a+b=+b);14returna+b;15}16}练习1.修改上一个程序,新建一个Another类,将method方法移到该类中。2.在原类的main方法中调用Another类的method方法,接收返回的面积值并打印。第二节参数的值传递方法的参数传递方法,必须有其所在类或对象调用才有意义。若方法含有参数:形参:方法声明时的参数实参:方法调用时实际传给形参的参数值Java的实参值如何传入方法呢?Java里方法的参数传递方式只有一种:值传递。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。栈:局部变量和对象的引用堆:对象(new出的来东西)方法的参数传递—基本数据类型的参数传递方法的参数传递—引用数据类型的参数传递方法的参数传递—引用数据类型的参数传递方法的参数传递publicclassTestTransfer{publicstaticvoidswap(inta,intb){inttmp=a;a=b;b=tmp;System.out.println(swap方法里,a的值是+a+;b的值是+b);}publicstaticvoidmain(String[]args){inta=6;intb=9;swap(a,b);System.out.println(交换结束后,变量a的值是+a+;变量b的值是+b);}}请输出结果方法的参数传递classDataSwap{publicinta;publicintb;}publicclassTestTransfer1{publicstaticvoidswap(DataSwapds){inttmp=ds.a;ds.a=ds.b;ds.b=tmp;System.out.println(swap方法里,aField的值是+ds.a+;bField的值是+ds.b);}publicstaticvoidmain(String[]args){DataSwapds=newDataSwap();ds.a=6;ds.b=9;swap(ds);System.out.println(交换结束后,aField的值是+ds.a+;bField的值是+ds.b);}}请输出结果第三节重载方法方法的重载(overload)重载的概念在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。重载的特点:与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。重载示例://返回两个整数的和intadd(intx,inty){returnx+y;}//返回三个整数的和intadd(intx,inty,intz){returnx+y+z;}//返回两个小数的和doubleadd(doublex,doubley){returnx+y;}•使用重载方法,可以为编程带来方便。•例如,System.out.println方法就是典型的重载方法,其内部的声明形式如下:publicvoidprintln(bytex)publicvoidprintln(shortx)publicvoidprintln(intx)publicvoidprintln(longx)publicvoidprintln(floatx)publicvoidprintln(doublex)publicvoidprintln(charx)publicvoidprintln(doublex)publicvoidprintln()……方法的重载1.判断:与voidshow(inta,charb,doublec){}构成重载的有:a)voidshow(intx,chary,doublez){}//没有b)intshow(inta,doublec,charb){}//可以c)voidshow(inta,doublec,charb){}//可以d)booleanshow(intc,charb){}//参数个数不同e)voidshow(doublec){}//参数个数不同f)doubleshow(intx,chary,doublez){}//不,与返回值类型无关g)voidshows(){doublec}//不能,方法名不同练习1.编写程序,定义三个重载方法并调用。方法名为mOL。三个方法分别接收一个int参数、两个int参数、一个字符串参数。分别执行平方运算并输出结果,相乘并输出结果,输出字符串信息。在主类的main()方法中分别用参数区别调用三个方法。2.定义三个重载方法max(),第一个方法求两个int值中的最大值,第二个方法求两个double值中的最大值,第三个方法求三个double值中的最大值,并分别调用三个方法。练习