【Java学习笔记】 21 - 方法重载,可变参数

目录

一、方法重载基本介绍

二、 方法重载快速入门

三、方法重载细节以及注意事项

四、方法重载练习

1.

2.

3.

五、可变参数基本介绍

六、可变参数的细节和注意事项

1.可变参数的实参可以是0个或者任意多个

2.可变参数的实参可以为数组

3.可变参数的本质就是数组

4.可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后

5.一个形参列表只能出现一个可变参数

七、可变参数练习


一、方法重载基本介绍

        java中允许同一个类,多个同名方法的存在,但要求形参列表不一致,比如:System.out.print(); out是PrintSream类型的对象

二、 方法重载快速入门

public class OverLoad01{
	public static void main(String[] args){
		MyCalculator cal = new MyCalculator();
		System.out.println(cal.calculate(1,6));
		System.out.println(cal.calculate(1,6.9));
		System.out.println(cal.calculate(1.9,6));
		System.out.println(cal.calculate(1,6,10));
	}
}

class MyCalculator{
	public int calculate(int n1,int n2){//int int 的和
		return n1 + n2;
	}
	public double calculate(int n1,double n2){//int double 的 和
		return n1 + n2;
	}
	public double calculate(double n1,int n2){//double int 的 和
		return n1 + n2;
	}
	public int calculate(int n1,int n2,int n3){//三个int的和
		return n1 + n2 + n3;
	}
}

                

                

三、方法重载细节以及注意事项

        1.方法名需要一样才能叫方法重载

        2.形式参数列表:必须不同(形参类型或者个数或者顺序,至少有一个不一样 )参数名无要求,形参只在当前方法内生效

        3.返回类型:无要求 返回类型不是方法重载的必要条件

四、方法重载练习

1.

        

a没有构成重载,参数名字不一样不是必要条件,b构成,c构成,d构成,形参个数不一样;e构成;f 不构成,返回类型不是必要条件;g不是,方法名不同

2.

        

public class OverLoadExercise01{
	public static void main(String[] args){
		Methods cal = new Methods();
		System.out.println(cal.m(90));
		System.out.println(cal.m(20,123));
		System.out.println(cal.m("Jack"));
	}
}

class Methods{
	public int m(int n1){//int int 的和
		return n1 = n1 * n1;
	}
	public int m(int n1,int n2){//int double 的 和
		return n1 * n2;
	}
	public String m(String n1){//double int 的 和
		return n1;
	}
}

       

3.

         

public class OverLoadExercise01{
	public static void main(String[] args){
		Methods cal = new Methods();
		System.out.println(cal.m(90,2));
		System.out.println(cal.m(20.5,645.7));
		System.out.println(cal.m(6.5,8.9,65.0));
	}
}

class Methods{
	public int m(int n1,int n2){//int int 的和
		int n3 = 0;
		if(n1 > n2){
			n3 = n1;
		}else{
			n3 = n2;
		}
		return n3;
//return n1 > n2 ? n1:n2;
	}
	public double m(double n1,double n2){//int double 的 和
		double n3 = 0;
		if(n1 > n2){
			n3 = n1;
		}else{
			n3 = n2;
		}
		return n3;
//return n1 > n2 ? n1:n2;
	}
	public double m(double n1,double n2,double n3){//double int 的 和
		double max = 0;
		if(n1 > n2){
			max = n1;
		}else {
			max = n2;
		}
		if(n3 > max){
			max = n3;
		}
		return max;
//double max = n1 > n2 ? n1:n2;
//return n3 > max ? n3:max;  //使用三元运算符
	}
}

                 

注意,如果发生自动数据类型转换,会找到对应的形式参数的数据类型跳转,自动转换的跳转优先级较低

例如

    System.out.println(cal.m(6.5,8.9,65));



	public double m(double n1,double n2,double n3){
        double max = n1 > n2 ? n1:n2;
        return n3 > max ? n3:max;  
	}
    public double m(double n1,double n2,int n3){
        double max = n1 > n2 ? n1:n2;
        return n3 > max ? n3:max; 
    }

会优先执行下面的方法,当下面的方法不存在时,才会 自动转换为double传入上面的方法

五、可变参数基本介绍

概念:

        java允许将同一个类多个同名 同功能 但 参数个数 不同的方法,封装成一个方法,就可以通过可变参数形式

语法:

        访问修饰符 返回类型 方法名(数据类型...形参名){

}

public class VarParameter01{
	public static void main(String[] args){
		HspMethod a = new HspMethod();
		System.out.println(a.sum(654,16,1561,0));
	}
}
class HspMethod{
	//计算两个数的和 三个数的和 四个的和。。N个的和
	//可以使用方法重载 
	// public int sum (int n1,int n2){
	// 	return n1 + n2;
	// }
	// public int sum (int n1,int n2,int n3){
	// 	return n1 + n2;
	// }
	// public int sum (int n1,int n2,int n3,int n4){
	// 	return n1 + n2;
	// }
	//上面几个方法只是形式参数不同,可以使用可变参数优化
	public int sum (int ... nums){//可以接受n个int 这个nums可以当做数组
		System.out.println("接受的参数个数" + nums.length);
		int sums = 0;
		for (int i = 0;i < nums.length;i++){
			sums += nums[i];
		}
		return sums;
	}
}

        

六、可变参数的细节和注意事项

1.可变参数的实参可以是0个或者任意多个

2.可变参数的实参可以为数组

public class VarParameterDetail{
	public static void main(String[] args){
		//2.可变参数的实参可以为数组
		int arr[] = {1,2,3};
		T t1 = new T();
		t1.f1(arr);
	}
}
class T{
	public void f1(int... nums){
		System.out.println("长度为" + nums.length);
	}
}

         

3.可变参数的本质就是数组

4.可变参数可以和普通类型的参数一起放在形参列表,但必须保证可变参数在最后

public class VarParameterDetail{
	public static void main(String[] args){
		//2.可变参数的实参可以为数组
		int arr[] = {1,2,3};
		T t1 = new T();
		t1.f1("jack",arr);
	}
}
class T{
	public void f1(String name,int... nums){
		System.out.println("长度为" + nums.length);
	}
}

5.一个形参列表只能出现一个可变参数

七、可变参数练习

                

public class VarParameterExercise{
	public static void main(String[] args){
		int arr[] = {20,50};
		T t1 = new T();
		System.out.println(t1.f1("jack",arr));
	}
}
class T{
	public String f1(String name,int... nums){
		int sum = 0;
		for(int i = 0;i < nums.length;i++){
			sum += nums[i];
		}
		return name + " 总成绩=" + sum;
	}
}

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yinhai1114

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值