初识Java(十三)面向对象之Java方法
5.2 Java中的方法
方法是类或者对象的行为特征抽象,方法是类或者对象最重要的组成部分。Java中的方法不能独立存在,所有的方法要么属于类,要么属于对象。5.2.1 方法的所属性
在Java语言中,方法不能独立存在,方法必须属于类或者对象。因此如果定义方法,那么方法只能定义在类体内,不能独立定义一个方法。如果方法使用static修饰,那么这个方法属于这个类,否则这个方法属于这个类的实例。因此方法的执行者要么是类或者类的实例对象。5.2.2 方法的参数传递机制
在方法声明时如果包含了形参声明,则调用方法时必须给这些形参指定参数值,调用方法时实际传递给形参的参数值也被称为实参。Java里方法的参数传递方式只有一种:值传递。所谓的值传递就是将实际参数值的副本(复制品)传入方法内,而参数本身不会受任何影响。
举例1:package com.langsin.test; public class Test { public void getSum(int a,int b){ a = a+b; System.out.println("参数a的值改变为:"+a); } public static void main(String[] args) { int a = 5; int b = 5; Test test = new Test(); test.getSum(a, b); System.out.println(a); } }
基本数据类型、引用数据类型为参数时的传递,传递的同样是实际值的副本,但要注意的是引用数据类型的值存放的是 地址值 ,即指向实际对象的那个地址值。所以调用方法时将地址值传递给了方法,方法操作时根据地址值找到了具体的对象,将具体对象的信息发生了变化。
举例2:Student类: package com.langsin.test; public class Student { protected String name = "zhangsan"; } Test类: package com.langsin.test; public class Test { private static void changeValue(Student st){ st.name = "李四"; } public static void main(String[] args) { Student st = new Student(); System.out.println(st.name); //zhangsan Test.changeValue(st); System.out.println(st.name); // } }5.2.3 递归方法
一个方法体内调用它自身,被称为方法递归。方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无需循环控制。
例如1:计算1+2+3+4+…..+100的和为多少?public class Test { public static int getSum(int num){ if(num>1){ return num+getSum(num-1); }else{ return num; } } Public static void main(String[] args) { int total = Test.getSum(100); System.out.println(total); } }
练习1:已知有一个数列,f(0)=1,f(1)=4,f(2) =2*f(1)+f(0),f(n) = 2*f(n-1)+f(n-2)
其中n是大于等于0的整数,求f(10)的值。
return getNum(num-1)*2+getNum(num-2)
练习2:
猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
5.2.4 方法重载
Java允许同一个类里定义多个同名方法,只要形式参数列表不同就行。如果同一个类中包含了两个或两个以上方法的方法名相同,但形参不同,则被称为方法重载。至于方法的其他部分,如方法返回值类型、修饰符等与方法重载没有任何关系。
举例1:Public class Test { public void printMsg(){ System.out.println("输出打印信息"); } public String printMsg(String msg){ System.out.println("输出打印信息:"+msg); return msg; } public static void main(String[] args) { Test test = new Test(); test.printMsg(); test.printMsg("你好"); } }