目录
一、方法的概念
1.1什么是方法
方法就是一个代码片段
.
类似于
C
语言中的
"
函数
"
。方法存在的意义
(
不要背
,
重在体会
):
1.
是能够模块化的组织代码
(
当代码规模比较复杂的时候
).
2.
做到代码被重复使用
,
一份代码可以在多个位置使用
.
3.
让代码更好理解更简单
.
4.
直接调用现有方法开发
,
不必重复造轮子
.
1.2方法的定义
方法语法定义的格式如下:
下面举一个例子:实现一个两个整数相加的方法
public class Method{
// 方法的定义
public static int add(int x, int y) {
return x + y;
}
}
【注意事项】
1. 修饰符:现阶段直接使用public static 固定搭配
2. 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成
void
3. 方法名字:采用小驼峰命名
4. 参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开
5. 方法体:方法内部要执行的语句
6. 在java当中,方法必须写在类当中
7. 在java当中,方法不能嵌套定义
8. 在java当中,没有方法声明一说
1.3实参和形参的关系
方法的形参相当于数学函数中的自变量,比如:
1 + 2 + 3 + … + n
的公式为
sum(n) =(1+n)*n/2
Java
中方法的形参就相当于
sum
函数中的自变量
n
,用来接收
sum
函数在调用时传递的值的
。形参的名字可以随意取,对方法都没有任何影响,形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值
。
public static int getSum(int N){ // N是形参
return (1+N)*N / 2;
}
getSum(10); // 10是实参,在方法调用时,形参N用来保存10
getSum(100); // 100是实参,在方法调用时,形参N用来保存100
注意:
在
Java
中,实参的值永远都是拷贝到形参中,形参和实参本质是两个实体
代码示例:交换两个整型变量
public class TestMethod {
public static void main(String[] args) {
int a = 10;
int b = 20;
swap(a, b);
System.out.println("main: a = " + a + " b = " + b);
}
public static void swap(int x, int y) {
int tmp = x;
x = y;
y = tmp;
System.out.println("swap: x = " + x + " y = " + y);
}
}
// 运行结果
swap: x = 20 y = 10
main: a = 10 b = 20
可以看到,在
swap
函数交换之后,形参
x
和
y
的值发生了改变,但是
main
方法中
a
和
b
还是交换之前的值,即没有交换成功。
【
原因分析
】
实参
a
和
b
是
main
方法中的两个变量,其空间在
main
方法的栈
(
一块特殊的内存空间
)
中,而形参
x
和
y
是
swap
方法中的两个变量,x
和
y
的空间在
swap
方法运行时的栈中,因此:实参
a
和
b
与 形参
x
和
y
是两个没有任何关联性的变量,
在
swap
方法调用时,只是将实参
a
和
b
中的值拷贝了一份传递给了形参
x
和
y
,因此对形参
x
和
y
操作不会对实参
a
和
b产生任何影响。
【
解决办法
】
:
传引用类型参数
(
例如数组来解决这个问题
)
public class TestMethod {
public static void main(String[] args) {
int[] arr = {10, 20};
swap(arr);
System.out.println("arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
}
public static void swap(int[] arr) {
int tmp = arr[0];
arr[0] = arr[1];
arr[1] = tmp;
}
}
// 运行结果
arr[0] = 20 arr[1] = 10
二、方法的重载
在
Java
中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了
。例如下面代码都是相加,只是是不同类型的数相加。
public class TestMethod {
public static void main(String[] args) {
add(1, 2); // 调用add(int, int)
add(1.5, 2.5); // 调用add(double, double)
add(1.5, 2.5, 3.5); // 调用add(double, double, double)
}
public static int add(int x, int y) {
return x + y;
}
public static double add(double x, double y) {
return x + y;
}
public static double add(double x, double y, double z) {
return x + y + z;
}
}
注意:
1. 方法名必须相同
2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)
3. 与返回值类型是否相同无关