方法(method、函数):
- 方法是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中也称为函数或过程。
- 将功能封装为方法的目的是,可以实现代码重用,简化代码
- Java里的方法不能独立存在,所有的方法必须定义在类里。
方法声明格式:
- 权限修饰符:public、缺省、private、 protected等
- 返回值类型:
- 方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用
return关键字来返回指定类型的变量或常量:“return 数据”。
注:分支结构,各分支语句都必须有返回值
- 方法没有返回值,则方法声明时,使用void来表示。通常,没有返回值的方法中,就不需要使用return。但是,如果使用的话,只能“return;”表示结束此方法的意思。
- 方法名:小驼峰命名
- return关键字:
- 使用范围:使用在方法体中
- 作用:① 结束方法
② 针对于有返回值类型的方法,使用”return 数据”方法返回所要的数据。
- 注意点:return关键字后面不可以声明执行语句。
方法的使用:
- 方法的使用中,可以调用当前类的属性或方法
特殊的:方法A中又调用了方法A———>递归方法。
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
- 重载的特点:
跟方法的权限修饰符、返回值类型、形参变量名、方法体是否相同无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。
- “两同一不同”:
同一个类、相同方法名
参数列表不同:参数个数不同,参数类型不同
注:当调用有多个同名方法的方法时,若其中所有方法的形参类型均不满足实参类型,查找是否存在实参经过自动类型提升而满足的形参列表,若存在,则调用此方法
例:
test.getSum(1,2);———>若只存在以下方法时,可调用。输出:2
public void getSum(double d1,double d2){
System.out.println(“2”);
}
方法参数的值传递机制 :
- 关于变量的赋值:
如果变量是基本数据类型,此时赋值的是变量所保存的数据值。
如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值。
- 形参与实参:
形参:方法声明时的参数
实参:方法调用时实际传给形参的参数值
- 值传递机制:
Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参
注:String类型较特殊
public static void main(String[] args) {
String s1 = “hello”;
ValueTransferTest test = new ValueTransferTest();
test.change(s1);
System.out.println(s1);//hello
}
public void change(String s){
System.out.println(s);//hello
s = “hi~~”;
System.out.println(s);//hi
}
递归方法:
- 递归方法:一个方法体内调用它自身。
- 方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。
- 递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。
例:已知有一个数列:f(0) = 1,f(1) = 4,f(n+2)=2f(n+1) + f(n),
其中n是大于0的整数,求f(10)的值。
public int f(int n){
if(n == 0){
return 1;
}else if(n == 1){
return 4;
}else{
// return f(n + 2) - 2 f(n + 1);———>无穷递归
return 2*f(n - 1) + f(n - 2);
}
}
可变个数的形参 :
JavaSE 5.0 中提供了Varargs(variable number of arguments)机制,允许直接定 义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参。
JDK 5.0前 | 采用数组形参来定义方法,传入多个同一类型变量 public static void test(int a ,String[] books); |
---|---|
JDK5.0 | 采用可变个数形参来定义方法,传入多个同一类型变量 public static void test(int a ,String…books); |
两者可视为等价
- 声明格式:方法名(参数的类型名 …变量名)
- 可变参数:调用可变个数形参的方法时,传入的实参个数可以是0个,1个或多个
- 可变个数形参的方法与同名的方法之间,彼此构成重载
- 彼此构成重载的可变个数形参的方法与形参类型对应想同且有限个数的同名方法同时存在时:优先调用确定形参个数的方法;
例:下列两个方法构成重载;优先调用第二个
- public void show(String … strs){
}
或
public void show(String[] strs){
}
- public void show(String strs1,String strs1,String strs1){
}
- 可变参数方法的使用与方法参数部分使用数组是一致的 ,所以,可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能共存。
public void show(String … strs){
System.out.println(“show(String … strs)”);
for(int i = 0;i < strs.length;i++){
System.out.println(strs[i]);
}
}
//不能与上一个方法同时存在
public void show(String[] strs){
}
- 方法的形参列表有可变形参,需要放在形参声明的最后,否则无法区分可变形参可数而报错(The variable argument type String of the method show must be the last parameter)
public void show(int i,String …strs,){
}
- 在一个方法的形参列表中,最多只能声明一个可变个数形参