5.5.1 特殊参数之一:可变参数
在JDK1.5之后,当定义一个方法时,形参的类型可以确定,但是形参的个数不确定,那么可以考虑使用可变参数。可变参数的格式:
【修饰符】 返回值类型 方法名(【非可变参数部分的形参列表,】参数类型... 形参名){ }
可变参数的特点和要求:
(1)一个方法最多只能有一个可变参数
(2)如果一个方法包含可变参数,那么可变参数必须是形参列表的最后一个
(3)在声明它的方法中,可变参数当成数组使用
(4)其实这个书写“≈”
【修饰符】 返回值类型 方法名(【非可变参数部分的形参列表,】参数类型[] 形参名){ }
只是后面这种定义,在调用时必须传递数组,而前者更灵活,既可以传递数组,又可以直接传递数组的元素,这样更灵活了。
1、方法只有可变参数
案例:求n个整数的和
package com.atguigu.test05.param; public class NumberTools { int total(int[] nums){ int he = 0; for (int i = 0; i < nums.length; i++) { he += nums[i]; } return he; } int sum(int... nums){ int he = 0; for (int i = 0; i < nums.length; i++) { he += nums[i]; } return he; } }
package com.atguigu.test05.param; 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}));//传入数组实参 System.out.println("------------------------------------"); System.out.println(tools.total(new int[]{}));//0个元素的数组 System.out.println(tools.total(new int[]{5}));//1个元素的数组 System.out.println(tools.total(new int[]{5,6,2,4}));//传入数组实参 } }
2、方法包含非可变参数和可变参数
-
非可变参数部分必须传入对应类型和个数的实参;
-
可变参数部分按照可变参数的规则传入0~n个对应类型的实参或传入1个对应类型的数组实参;
案例:
n个字符串进行拼接,每一个字符串之间使用某字符进行分割,如果没有传入字符串,那么返回空字符串""
package com.atguigu.test05.param; public class StringTools { String concat(char seperator, String... args){ String str = ""; for (int i = 0; i < args.length; i++) { if(i==0){ str += args[i]; }else{ str += seperator + args[i]; } } return str; } }
package com.atguigu.test05.param; public class StringToolsTest { public static void main(String[] args) { StringTools tools = new StringTools(); System.out.println(tools.concat('-')); System.out.println(tools.concat('-',"hello")); System.out.println(tools.concat('-',"hello","world")); System.out.println(tools.concat('-',"hello","world","java")); } }