一、方法重载
- 同一个类中,出现多个方法名称相同,但是形参列表是不同的,那么这些方法就是 重载方法 。
二、案例导学
- 开发武器系统,功能需求如下:
- 可以默认发一枚武器
- 可以指定地区发射一枚武器
- 可以指定地区发射多枚武器
package com.app.overload;
/**
目标:识别方法重载的形式,并理解其调用流程
案例导学:
开发武器系统,功能需求如下:
- 可以默认发一枚武器
- 可以指定地区发射一枚武器
- 可以指定地区发射多枚武器
*/
public class MethodDemo1 {
// 可以默认发一枚武器
public static void fire() {
System.out.println("默认发射一枚武器给米国~");
}
// 可以指定地区发射一枚武器
public static void fire(String location) {
System.out.println("给" + location + "发射一枚武器~");
}
// 可以指定地区发射多枚武器
public static void fire(String location, int nums) {
System.out.println("给" + location + "发射" + nums + "枚武器~");
}
public static void main(String[] args) {
// 调用方法,传递值,进行发射武器
fire();
fire("德国");
fire("美国", 100);
}
}
输出结果:
默认发射一枚武器给米国~
给德国发射一枚武器~
给美国发射100枚武器~
图文解析
三、方法重载的好处
- 可读性好,方法名称相同提示是同一类型的功能,通过形参不同来实现功能差异化的选择,这是一种专业的代码设计。
package com.app.overload;
/**
目标:识别方法重载的形式,并理解其调用流程
案例导学:
开发武器系统,功能需求如下:
- 可以默认发一枚武器
- 可以指定地区发射一枚武器
- 可以指定地区发射多枚武器
*/
public class MethodDemo1 {
// 可以默认发一枚武器
public static void fire() {
fire("米国");
}
// 可以指定地区发射一枚武器
public static void fire(String location) {
fire(location, 1);
}
// 可以指定地区发射多枚武器
public static void fire(String location, int nums) {
System.out.println("默认给" + location + "发射" + nums + "枚武器~");
}
public static void main(String[] args) {
// 调用方法,传递值,进行发射武器
fire();
fire("德国");
fire("德国", 100);
}
}
输出结果:
默认给米国发射1枚武器~
默认给德国发射1枚武器~
默认给德国发射100枚武器~
- 重点:方法重载时,由于方法名称相同的缘故,可以相互调用,优化了许多代码,非常灵活!
总结
1、方法重载是什么?
- 同一个类中,出现多个相同名称的方法,但是形参列表不同
2、使用方法重载的好处?
- 对于相似功能的业务场景:可读性好,方法名称相同提示是同一类型的功能,通过形参不同实现功能差异化的选择,这是一种专业的代码设计。
四、方法重载的识别技巧
-
只要是 同一个类中,方法名称相同、形参列表不同, 那么它们就是重载的方法,其它都不管!!
(如:修饰符、返回值类型都不影响!!)
-
形参列表的不同指的是:形参的 个数、类型、顺序 不同,不关心形参的名称。
package com.app.overload;
/**
目标:识别重载方法的技巧
*/
public class MethodDemo2 {
// 新方法
public static void open(){}
// 重载方法:形参列表多一个
public static void open(int a){}
// 重载方法:形参列表多一个,修饰符不关心
static void open(int a, int b){}
// 重载方法:形参列表类型不同
public static void open(double a, int b){}
// 重载方法:形参列表类型、顺序不同
public static void open(int a, double b){}
// 重复方法:形参列表类型重复,即使形参名称不同,但是类型重复就不是重载方法
// public void open(int i, double b){}
// 新方法:方法名称不同
public static void OPEN(){}
}
总结
1、方法重载的关键要求是什么?
- 同一个类中,多个方法名称相同、形参列表不同,其他不关心。
2、形参列表不同指的是什么?
- 形参的个数、类型、顺序不同,形参名称不关心。
五、补充:单独使用 return 关键字
- return ——> 可以立即跳出并结束当前方法的执行;return关键字单独使用可以放在任何方法中。
package com.app.returndemo;
public class ReturnDemo {
public static void main(String[] args) {
// 目标:明确return关键字的作用
chu(10, 0); // 数学bug:0不能作为除数
}
// 除法方法
public static void chu(int a, int b) {
int c = a / b;
System.out.println("结果是:" + c);
}
}
输出结果:
Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.app.returndemo.ReturnDemo.chu(ReturnDemo.java:11)
at com.app.returndemo.ReturnDemo.main(ReturnDemo.java:6)
- 错误说明:也就是数学bug,0不能作为除数
- 单独使用return关键字来解决这个错误!!
package com.app.returndemo;
public class ReturnDemo {
public static void main(String[] args) {
// 目标:明确return关键字的作用
chu(10, 0); // 数学问题:0不能作为除数
chu(10, 5); // 2
}
// 除法方法
public static void chu(int a, int b) {
if (b == 0){
System.out.println("您输入的数据有问题,0不能作为除数");
return; // 发现输入的数据是0,所以单独使用return关键字——>立即跳出并结束当前方法chu的执行
}
int c = a / b;
System.out.println("结果是:" + c);
}
}
输出结果:
您输入的数据有问题,0不能作为除数
结果是:2
总结
1、如果要直接结束当前方法的执行,怎么解决?
- return; 立即跳出并结束当前方法的执行。不影响其他方法的执行。
扩展回顾:
- break; 立即跳出并结束当前所在循环的执行。不影响其他循环的执行。
- continue; 立即结束当前循环的当次执行,进入下一次执行。