在**JDK 5.0 中提供了Varargs(variable number of arguments)**机制。即当定义一个方法时,形参的类型可以确定,但是形参的个数不确定,那么可以考虑使用可变个数的形参。
格式:
方法名(参数的类型名 ...参数名)
举例:
//JDK 5.0以前:采用数组形参来定义方法,传入多个同一类型变量
public static void test(int a ,String[] books);
//JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量
public static void test(int a ,String...books);
特点:
-
可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
-
可变个数形参的方法与同名的方法之间,彼此构成重载
-
可变参数方法的使用与方法参数部分使用数组是一致的,二者不能同时声明,否则报错。
-
方法的参数部分有可变形参,需要放在形参声明的最后
-
在一个方法的形参中,最多只能声明一个可变个数的形参
求n个整数的和
public class NumberTools {
public int sum(int... nums){
int sum = 0;
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
}
return sum;
}
}
public class TestVarParam {
public static void main(String[] args) {
NumberTools tools = new NumberTools();
System.out.println(tools.sum());//0个实参
System.out.println(tools.sum(5));//1个实参
System.out.println(tools.sum(5,6,2,4));//4个实参
System.out.println(tools.sum(new int[]{5,6,2,4}));//传入数组实参
}
}
方法的参数传递机制
形参和实参
- 形参(formal parameter):在定义方法时,方法名后面括号()中声明的变量称为形式参数,简称形参。
- 实参(actual parameter):在调用方法时,方法名后面括号()中的使用的值/变量/表达式称为实际参数,简称实参。
参数传递机制:值传递
Java里方法的参数传递方式只有一种:值传递
。 即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
-
形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
-
形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参
public class Demo {
public static void main(String[] args) {
int a = 10;
int b = 10;
method(a, b);//仅打印a=100,b=200
// method1(a, b);
System.out.println("a = " + a);
System.out.println("b = " + b);
}
private static void method(int a, int b) {
a = a * 10;
b *= 10;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.exit(0);
}
public static void method1(int a, int b) {
PrintStream ps = new PrintStream(System.out) {
@Override
public void println(String x) {
if ("a = 10".equals(x)) {
x = "a=100";
} else if ("b = 10".equals(x)) {
x = "b=200";
}
super.println(x);
}
};
System.setOut(ps);
}
}