方法就是一个代码片段,
类似于
C
语言中的
"
函数
"。
方法可以是我们代码逻辑更清晰,并且可以服用方法使代码更简洁
方法语法格式
// 方法定义
修饰符 返回值类型 方法名称([参数类型 形参 ...]){
方法体代码;
[return 返回值];
}
实例:实现一个两数相加的方法
public class Method{
// 方法的定义
public static int add(int x, int y) {
return x + y;
}
}
【
注意事项
】
- 修饰符:现阶段直接使用public static 固定搭配
- 返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成 void
- 方法名字:采用小驼峰命名
- 参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开
- 方法体:方法内部要执行的语句
- 在java当中,方法必须写在类当中
- 在java当中,方法不能嵌套定义
- 在java当中,没有方法声明一说
【
方法调用过程
】
调用方法
---
>
传递参数
---
>
找到方法地址
---
>
执行被调方法的方法体
---
>
被调方法结束返回
---
>
回到主调方法继续往下
执行
【
注意事项
】
- 定义方法的时候, 不会执行方法的代码. 只有调用的时候才会执行.
- 一个方法可以被多次调用.
形参和实参的关系
实参
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中的方法重载与C++的函数重载差不多
都支持相同的方法实现对不同类型的参数进行操作
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. 与返回值类型是否相同无关
需要值得一提的是:
返回值不同但参数相同不构成方法重载
在同一个作用域中不能定义两个相同名称的标识符。比如:方法中不能定义两个名字一样的变量,那
为什么类中就
可以定义方法名相同的方法呢?
原因是方法在编译的时候生成了方法签名,不同参数的方法生成的方法签名不一样
方法签名即:经过编译器编译修改过之后方法最终的名字。具体方式:
方法全路径名
+
参数列表
+
返回值类型,构成
方法完整的名字。