java 动态调节参数个数

本文探讨了Java中使用`paramType... paramName`语法创建的可变参数方法,这种方法允许接收任意数量的同类型参数。通过示例代码展示了如何调用此类方法,即使参数个数不同,编译器也不会报错。与重载方法相比,可变参数方法提供了更灵活的调用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天看源码,突然发现有个方法的类型为 public void functionName(paramtType... paramtName) { ..........},不明白是什么意思 ,通过调用才知道这种方法的参数是可以动态调节的 ,就是我可以同类型的参数传无数个过来 ,话不多说,直接上代码

public static int sum(int a, int... s) {

		for (int i : s) {
			a += i;
		}
		return a;

}

这是一个很简单的方法 ,就是把传进来的参数相加,接下来我们看看怎么调用

public static void main(String[] args) {
		//传一个参数
		int a = sum(1);
		//传两个参数
		int b = sum(1, 2);
		//传三个参数
		int c = sum(1,2,3);
		//传四个参数
		int d = sum(1,2,3,4);
		//传五个参数
		int e = sum(1,2,3,4,5);
		System.out.println("a = "+a);
		System.out.println("b = "+b);
		System.out.println("c = "+c);
		System.out.println("d = "+d);
		System.out.println("e = "+e);
}

注意:同一个方法我们传了不同个数的参数 ,编译器没有报错

有朋友们肯定该问了 ,重载方法不是可以实现吗 ,但是我要告诉你们的是重载的话,只能你定义的方法可以调用,做不到这么智能的调用,

调用结果:

a = 1
b = 3
c = 6
d = 10
e = 15

下面是字符串的两个方法

    /**
	 * 可以传递 任意多个 字符串 不传也可以
	 * @param strs
	 * @return
	 */
	public static String add(String... strs) {
		StringBuffer sbu = new StringBuffer();
		for (String string : strs) {
			sbu.append(string);
		}
		return sbu.length() == 0 ? null : sbu.toString();
	}

	/**
	 * 可以传递 任意多个 字符串[] 不传也可以
	 * @param strs
	 * @return
	 */
	public static String adds(String[]... strs) {
		StringBuffer sbu = new StringBuffer();
		for (String[] string : strs) {
			for (String string2 : string) {
				sbu.append(string2);
			}
		}
		return sbu.length() == 0 ? null : sbu.toString();
	}

看下调用:

	public static void main(String[] args) {
		
		//不传参数
		String str1=add();
		//传递一个参数
		String str2=add("我");
		//传递两个参数
		String str3=add("我","是");
		//传递三个参数
		String str4=add("我","是","中");
		//传递四个参数
		String str5=add("我","是","中","国");
		//传递五个参数
		String str6=add("我","是","中","国","人");
		
		System.out.println("str1 = "+str1);
		System.out.println("str2 = "+str2);
		System.out.println("str3 = "+str3);
		System.out.println("str4 = "+str4);
		System.out.println("str5 = "+str5);
		System.out.println("str6 = "+str6);
		
	}

打印 结果:

str1 = null
str2 = 我
str3 = 我是
str4 = 我是中
str5 = 我是中国
str6 = 我是中国人

完整demo:

public class Demo {
	public static void main(String[] args) {
		//传一个参数
		int a = sum(1);
		//传两个参数
		int b = sum(1, 2);
		//传三个参数
		int c = sum(1,2,3);
		//传四个参数
		int d = sum(1,2,3,4);
		//传五个参数
		int e = sum(1,2,3,4,5);
		System.out.println("a = "+a);
		System.out.println("b = "+b);
		System.out.println("c = "+c);
		System.out.println("d = "+d);
		System.out.println("e = "+e);
		
		//不传参数
		String str1=add();
		//传递一个参数
		String str2=add("我");
		//传递两个参数
		String str3=add("我","是");
		//传递三个参数
		String str4=add("我","是","中");
		//传递四个参数
		String str5=add("我","是","中","国");
		//传递五个参数
		String str6=add("我","是","中","国","人");
		
		System.out.println("str1 = "+str1);
		System.out.println("str2 = "+str2);
		System.out.println("str3 = "+str3);
		System.out.println("str4 = "+str4);
		System.out.println("str5 = "+str5);
		System.out.println("str6 = "+str6);
		
		//不传参数
		String strs1=adds();
		//传递一个参数
		String strs2=adds(new String[]{"我"});
		//传递一个参数
		String strs3=adds(new String[]{"我"," | "},new String[]{"是"," | "," | "});
		//传递一个参数
		String strs4=adds(new String[]{"我"," | "},new String[]{"是"," | "," | "},new String[]{"中"," | "," | "," | "});
		//传递一个参数
		String strs5=adds(new String[]{"我"," | "},new String[]{"是"," | "," | "},new String[]{"中"," | "," | "," | "},new String[]{"国"," | "," | "," | "," | "});
		//传递一个参数
		String strs6=adds(new String[]{"我"," | "},new String[]{"是"," | "," | "},new String[]{"中"," | "," | "," | "},new String[]{"国"," | "," | "," | "," | "},new String[]{"人"," | "," | "," | "," | "," | "});
		
		System.out.println("strs1 = "+strs1);
		System.out.println("strs2 = "+strs2);
		System.out.println("strs3 = "+strs3);
		System.out.println("strs4 = "+strs4);
		System.out.println("strs5 = "+strs5);
		System.out.println("strs6 = "+strs6);
		
	}

	public static int sum(int a, int... s) {

		for (int i : s) {
			a += i;
		}
		return a;
	}

	/**
	 * 可以传递 任意多个 字符串 不传也可以
	 * @param strs
	 * @return
	 */
	public static String add(String... strs) {
		StringBuffer sbu = new StringBuffer();
		for (String string : strs) {
			sbu.append(string);
		}
		return sbu.length() == 0 ? null : sbu.toString();
	}

	/**
	 * 可以传递 任意多个 字符串[] 不传也可以
	 * @param strs
	 * @return
	 */
	public static String adds(String[]... strs) {
		StringBuffer sbu = new StringBuffer();
		for (String[] string : strs) {
			for (String string2 : string) {
				sbu.append(string2);
			}
		}
		return sbu.length() == 0 ? null : sbu.toString();
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值