今天看源码,突然发现有个方法的类型为 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();
}
}