主要内容
- 方法的使用
学习目标
- 方法的定义
- 方法的调用
- 方法的参数
- 方法的重载
第一节 方法的定义
为什么要有方法这种概念?
原因1: 在一个代码文件里面, 可能有很多个功能逻辑, 这些逻辑全部放在一起, 逻辑不够清晰, 不易维护;
原因2: 某个逻辑功能可能会被二次或者多次使用, 每次使用都copy过来, 相同代码冗余.
方法是什么?
方法是执行某一个特定功能的代码块. 我们在用到这个特定功能的时候,不用重新编写, 只需要调用这个方法就可以了.
方法的优点?
使用方法可以使我们的代码逻辑清晰; 同时代码得到复用; 更容易维护.
语法格式:
修饰符 返回值类型 方法名(参数列表){
方法体;
}
举例:
//main方法, 是程序的入口, 由JVM调用
public static void main(String[] args){
System.out.println("Hello World");
}
//自定义的方法, 需要程序员在代码中调用
public int add(int num1,int num2){
return num1+num2;
}
public static void main(String[] args){
int result = add(1,1);
System.out.println("测试加法功能的方法: "+result)
}
如何使用方法
- main方法是程序的启动入口, 会被JVM自动调用;
- 自定义的方法要被程序员调用.
第二节 方法的调用
案例:
实现两个数相加
方法调用:
- 方式1: 单独调用 --> 方法名(参数)
- 方式2: 打印调用 --> System.out.println(方法名(参数))
- 方式3: 赋值调用 --> 数据类型 变量名 = 方法名(参数)
public int add(int num1,int num2){
return num1+num2;
}
public static void main(String[] args){
//方式1: 单独调用 --> 方法名(参数)
add(1,1);
//方式2: 打印调用 --> System.out.println(方法名(参数))
System.out.println("调用方式2: "+add(2,2));
//方式3: 赋值调用 --> 数据类型 变量名 = 方法名(参数)
int result = add(3,3);
}
第三节 执行流程
方法执行顺序:
- 1, 调用方法, 同时传递参数;
- 2, 执行被调用的方法;
- 3, 返回结果给调用处.
//定义了一个add方法,三要素: 函数名,参数列表, 返回值
public int add(int num1,int num2){
return num1+num2;
}
public static void main(String[] args){
/*
0, 程序的入口是main方法,启动后执行第13行;
1, 调用add方法, 同时传递给add方法两个参数1,1;
2, 方法被调用后执行第3行;
3, 方法执行后, 返回结果赋值给第13行的result变量
*/
int result = add(1,1);
System.out.println("测试加法功能的方法: "+result)
}
第四节 参数和返回值
形式参数:
在定义方法的时候
,只定义了这个变量, 而没有给具体值;
实际参数:
在调用方法的时候
,给了一个具体的值
//定义了一个add方法
// 形式参数: 定义方法的时候, 定义参数的数据类型和变量, 这个变量就是形式参数, 占位的作用
public int add(int num1,int num2){
return num1+num2;
}
public static void main(String[] args){
// 实际参数: 调用方法的时候, 给函数传递的参数, 叫做实际参数
int result = add(1,1);
System.out.println("测试加法功能的方法: "+result)
}
(1) 什么时候使用参数?
写程序其实很简单, 我们在实现一个方法功能的时候, 有些事情不能确定, 那么谁使用这个函数, 谁就来确定随机性的事情.
例如: 一个需求是实现一个计算1到n个数和的功能. 我们不知道方法被调用的时候具体要计算从0计算到几, 那么就把这个不确定的事情定义为参数, 让调用者传递进来.
所以, 参数的本质是不确定性的东西.
public int calculate(int n){
int result = 0;
for(int i = 1;i<=n; i++){
result += i;
}
return result;
}
(2)什么时候使用返回值?
调用者需要获取方法的处理结果
不确定的随机数据, 谁调用, 谁传递;
需要方法给一个处理结果, 那么就设定为返回值.
第五节 方法注意事项
方法不调用不执行;
方法不能嵌套;
方法运行的顺序和定义的顺序无关,只和调用的顺序有关;
-
方法写了void证明没有返回值, 方法内部就不要写
return 返回值;
了.但是可以写
return;
//定义一个不需要返回值的方法 public void calculate(int n){ int result = 0; for(int i = 1;i<=n; i++){ result += i; } return; //在这里没有语法错误, 但是没必要写, return;用在需要终止方法的地方 //return result; //这样写是语法错误, 因为方法已经定义为void也就是无返回值的 }
> **return作用详解**:
>
> 1. 1,结束方法 return;
> 2. 2将结果返回: return 数值;
返回值要和方法定义时候的返回值类型一致;
方法中有返回值的时候,我们没有必要将结果输出出来,在调用的时候将结果输出出来;
方法中没有返回值的时候,我们一般在方法内部直接将结果输出;
第六节 方法的重载
需求: 定义三个方法, 实现2个数相加, 3个数相加, 4个数相加
重载: 方法名相同,参数列表不同
优点: 只要记住方法名就可以了,方便使用
重载的注意事项:
重载和参数哪些因素有关?
- 参数个数
- 参数类型
- 参数类型顺序
哪些不构成重载?
- 返回值类型无关
- 参数变量名无关