一.方法的概念及使用
1.1 什么是方法(method)
方法就是一个代码片段
.
类似于
C
语言中的
"
函数
"
。方法存在的意义
:
1.
是能够模块化的组织代码
(
当代码规模比较复杂的时候
).
2.
做到代码被重复使用
,
一份代码可以在多个位置使用
.
3.
让代码更好理解更简单
.
4.
直接调用现有方法开发
,
不必重复造轮子
.
1.2 方法的定义(方法的语法格式)
修饰符 返回值类型 方法名称([参数类型 形参 ...]){
方法体代码
;
[
return
返回值
];
}
例:实现一个函数,检测一个年份是否为闰年
public class
Method
{
//
方法定义
public static
boolean
isLeapYear
(
int
year
){
if
((
0
==
year
%
4
&&
0
!=
year
%
100
)
||
0
==
year
%
400
){
return
true
;
}
else
{
return
false
;
}
}
}
【
注意事项
】
1.
修饰符:现阶段直接使用
public static
固定搭配;
2.
返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成 void;
3.
方法名字:采用小驼峰命名;
4.
参数列表:如果方法没有参数,
()
中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开;
5.
方法体:方法内部要执行的语句;
6.
在
java
当中,方法必须写在类当中;
7.
在
java
当中,方法不能嵌套定义;
8.
在
java
当中,没有方法声明一说。
1.3 方法调用的执行过程
【方法调用过程】
调用方法---
>
传递参数
---
>
找到方法地址
---
>
执行被调方法的方法体
---
>
被调方法结束返回
---
>回到主调方法继续往下执行
1.4 实参和形参的关系
public static
int
getSum
(
int
N
){
// N
是形参
return
(
1
+
N
)
*
N
/
2
;
}
getSum
(
10
);
// 10
是实参
,
在方法调用时,形参
N
用来保存
10
getSum
(
100
);
// 100
是实参,在方法调用时,形参
N
用来保存
100
Java
中方法的形参就相当于getS
um
函数中的自变量N
,用来接收getS
um
函数在调用时传递的值的
。形参的名字可以随意取,对方法都没有任何影响,形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值
。
注意:
在
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产生任何影响。
注意:对于
基础类型
来说
,
形参相当于实参的拷贝
.
即
传值调用。
二.方法重载
2.1 方法重载概念
在
Java
中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了
。
注意:
1.
方法名必须相同
2.
参数列表必须不同
(
参数的个数不同、参数的类型不同、类型的次序必须不同
)
3.
与返回值类型是否相同无关
4.
编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用哪个方法
# 注意:两个方法如果仅仅只是因为返回值类型不同,是不能构成重载的
public class TestMethod {
public static void main(String[] args) {
int a = 10;
int b = 20;
int ret = add(a, b);
System.out.println("ret = " + ret);
}
public static int add(int x, int y) {
return x + y;
}
public static double add(int x, int y) {
return x + y;
}
}
// 编译出错
Test.java:13: 错误: 已在类 Test中定义了方法 add(int,int)
public static double add(int x, int y) {
^
1 个错误