方法的重载与可变参数
方法的重载与可变参数
在java 中允许同一个类中, 多个同名方法的存在, 但要求【形参列表】不一致!这个和【返回值】无关。
重载方法能让我们更好更方便的起名字。
//两个整数的和
plus(int n1, int n2)
//一个整数, 一个 double 的和
plus(int n1, double n2)
//一个 double ,一个 Int 和
plus(double n2, int n1)
//三个 int 的和
plus(int n1, int n2,int n3)
构成重载的三个要素:
- 方法名必须一致。
- 参数不一致,有两层含义第一是参数的数量不一致,第二层含义是:参数的类型不一致,【参数的名字一样不一样都行】。
- 返回值无要求。
我们确实有这种需求,都是加法,但是需要的参数不同,我们有必要去为了它而创建一个新的方法名字吗?
plus1,plus2,plus3... 当然这样做也没有错,但是使用重载会让你的代码更加的优雅一点。
思考:
有这样一个方法:public void fun(int a,int b);
下边哪些方法和它重载。
- public void fun(int x,int y); //不是
- public void fun(int x,int y,int z); //是
- public void fun(int a,int b,int c); //是
- public int fun(int a,int b); //不是
- public int fun(int a,int b,int c); //是
【作业】
写两个重载的方法max()
- 一个方法求两个数的最大值。
- 一个方法求三个数的最大值,思路:先求出第一个和第二的最大值,再拿最大值和第三个比较
public class Max {
//方法重载
public int max(int a, int b){
if(a > b){
return a;
}else {
return b;
}
}
public int max(int a, int b, int c){
if (a > b && a > c){
return a;
}else if (b > a && b > c){
return b;
}else {
return c;
}
}
public static void main(String[] args) {
Max max = new Max();
System.out.println(max.max(18,10));
System.out.println(max.max(15,8,23));
}
}
18
23
Process finished with exit code 0
可变参数
有的时候我们是否有这种需求,我们想求几个数之和。
我们想写成 plus(1,2,3,4,....)
这个样子。
java中还真的有,这种参数可以随心所欲去传递的参数叫做【可变参数】。
【语法】:访问修饰符 返回类型 方法名(数据类型... 形参名) {}
举个例子:
//1.int...表示接受的是可变参数,类型是int,即可以接收多个int(0-多)
//2.使用可变参数时,可以当做数组来使用即nums可以当做数组
//3.遍历nums求和即可
public int sum(int... nums){
int result=0;
// 可变参的本质其实是个数组
for(inti=0;i<nums.length;i++){
result += nums[i];
}
return result;
}
你一旦定义了可变参数,它居然可以这么随心所欲的调用:
xxx.sum(1);
xxx.sum(1,2);
xxx.sum(1,32,3);
你完全没必要为每一种求和方法提供一个重载的方法。
本质:
就是将你传入的参数封装成了一个数组,他和可变参数是一样的,只是数组你需要自己去定义。
public int sum(int[] nums){
int result=0;
// 可变参的本质其实是个数组
for(inti=0;i<nums.length;i++){
result += nums[i];
}
return result;
}
注意点:
一个方法的形参列表最多只能出现一个可变参数。
public int sum(int... nums,int... nums2); // 不可以
可变参数可以和普通参数放在一起,但是可变参数必须放在最后。
public int sum(int first,int... nums2); // 可以
public int sum(int... nums2,int last); // 不可以
public class Max {
//可变参数
public int max(int b,int ...nums){
int result = 0;
for (int i = 0; i < nums.length; i++) {
result += nums[i];
}
return result;
}
public static void main(String[] args) {
Max max = new Max();
System.out.println(max.max(1,2,3));
}
}
6
Process finished with exit code 0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理