可变参数
可变参数又称参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的了
格式如下
修饰符 返回值类型 方法名(数据类型...变量名){}格式范例如下
xxxxxxxxxxpublic static int sum(int...a){}可变参数的注意事项如下 1、这里的变量其实是一个数组 2、如果一个方法有多个参数,其中包含可变参数,注意要把可变参数放在最后
可变参数的练习
xpackage ch16;
public class a_6_1测试 {
public static void main(String[] args) { System.out.println("-----普通写法如下-----------"); System.out.println(sum(10,20)); System.out.println(sum(10,20,30)); System.out.println(sum(10,20,30,40)); System.out.println("-----可变参数优化写法如下---------"); System.out.println(sum2(11,20)); System.out.println(sum2(11,20,30)); System.out.println(sum2(11,20,30,40)); System.out.println("-----可变参数遇到的问题及解决,如下---"); System.out.println(sum3(11,20,30,40,1)); System.out.println(sum3(11,20,30,40,1,1)); System.out.println(sum3(11,20,30,40,1,1,1));//如果使用了可变参数,那这里有多少个sum方法的参数数据都可以 }
public static int sum(int a,int b){return a+b;} public static int sum(int a,int b,int c){return a+b+c;} public static int sum(int a,int b,int c,int d){return a+b+c+d;}
//上面那些代码有个问题:每次多增一个数据进行求和时,都需要再提供一个方法,就很不方便我们实际开发//--------------------------------------------------------------------------------------------------------------- //我们可以用可变参数对上面那些代码进行优化,如下
public static int sum2(int...a){
//探究a的实质是什么 //System.out.println(a); //输出类似[I@4eec7777,即a是int类型的数组。原理:把上面第6~8行的每一个sum方法的参数数据都封装到a数组里面
//既然a是数组,就把数组中的数据拿出来进行求和,如下 int sum2 = 0; //使用增强for的方式对数组进行遍历 for(int i : a){ sum2+=i; } return sum2; }
//---------------------------------------------------------------------------------------------------------------
//public static int sum3(int...a,int b,int c){ //可变参数和多个参数一起时,这行写法就会报错,正确写法如下 public static int sum3(int b,int c,int...a){ int sum3 = 0; for(int i : a){ //注意这里只放进了a。b、c其实也应该放进来的。看需求吧,不放进来其实对这节课更友好 sum3+=i; } return sum3; }
//注意:可变参数的使用,有一个问题。以上面的sum方法为例,如果sum方法有多个参数,且有可变参数的情况下,如下 //sum3(int...a,int b,int c)就会出现报错,这里的b、c我们叫多个参数,这里的int...a叫可变参数 //报错原因:int...a是我们的可变参数,它会把传进来的所有参数从第一个到最后一个都封装到a数组里面,于是b、c就接收不到数据 //解决:把多个参数放到可变参数的后面即可,即可变参数在最后,如下 //sum3(int b,int c,int...a)就解决报错了 //解决的原理:传进来的第一个参数会传给b,第二个参数会传给c,剩下的其他参数就会都封装到a数组里面
}
可变参数的使用
1、在Arrays类中的asList(T...a)静态方法,作用是返回由指定数组支持的固定大小的列表,返回值是List
2、在List集合或叫接口中的of(E...elements)静态方法,作用是返回包含任意数量元素的不可变列表,返回值是List
3、Set集合或叫接口中的of(E...elements)静态方法,作用是返回包含任意数量元素的不可变列表,返回值是Set
可变参数使用的练习
xxxxxxxxxxpackage ch16;
import java.util.Arrays;import java.util.List;import java.util.Set;
public class a_7_1测试 {
public static void main(String[] args) {
//1、在Arrays类中的asList(T...a)静态方法,作用是返回由指定数组支持的固定大小的列表,返回值是List<E>集合 List<String> list = Arrays.asList("hello1", "world1", "java1"); System.out.println(list);//输出[hello1, world1, java1]
//如果给list里面添加元素。就会报错,抛出UnsupportedOperationException异常,该异常是指不支持请求的操作,即不允许进行添加元素的操作 //list.add("哦呜");
//如果给list里面移除元素。就会报错,抛出UnsupportedOperationException异常,该异常是指不支持请求的操作,即不允许进行移除元素的操作 //list.remove("hello1");
//如果给list里面修改元素。可以修改不会报错 list.set(1,"修改"); System.out.println(list); System.out.println("-------------------------------");
//总结:通过Arrays.asList方法得到的list集合,不能使用添加、删除方法。原因:添加和删除会改变集合的大小
//----------------------------------------------------------------------------------------------------------------
//2、在List集合或叫接口中的of(E...elements)静态方法,作用是返回包含任意数量元素的不可变列表,返回值是List<E>集合 List<String> list2 = List.of("hello2", "world2", "java2"); System.out.println(list2);
//如果集合中出现重复元素,不会报错,即List集合可以允许有重复元素 List<String> list22 = List.of("hello2", "world2", "java2","java2"); System.out.println(list22);
//如果给list2里面添加元素。就会报错,抛出UnsupportedOperationException异常,该异常是指不支持请求的操作,即不允许进行添加元素的操作 //list2.add("添加");
//如果给list2里面移除元素。就会报错,抛出UnsupportedOperationException异常,该异常是指不支持请求的操作,即不允许进行移除元素的操作 //list2.remove("hello2");
//如果给list2里面修改元素。就会报错,抛出UnsupportedOperationException异常,该异常是指不支持请求的操作,即不允许进行移除元素的操作 //list2.set(1,"修改"); System.out.println("-------------------------------");
//总结:通过List.of方法得到的list2集合,不能使用添加、删除、修改方法
//-----------------------------------------------------------------------------------------------------------------
//3、Set集合或叫接口中的of(E...elements)静态方法,作用是返回包含任意数量元素的不可变列表,返回值是Set<E>集合 Set<String> set = Set.of("hello3", "world3", "java3"); System.out.println(set);
//如果集合中出现重复元素。就会报错,抛出IllegalArgumentException异常,该异常是指非法或不正确的参数 //Set<String> set2 = Set.of("hello3", "world3", "java3","java3");
//如果给set里面添加元素。就会报错,抛出UnsupportedOperationException异常,该异常是指不支持请求的操作,即不允许进行添加元素的操作 //set.add("添加");
//如果给set里面移除元素。就会报错,抛出UnsupportedOperationException异常,该异常是指不支持请求的操作,即不允许进行移除元素的操作 //set.remove("hello3");
//set集合调用不了set方法,因为Set集合没有带索引的方法。所以不能做修改操作的
//总结:通过Set.of方法得到的set集合,不能使用添加、删除、修改方法,也不能出现重复元素。原因:Set集合没有带索引的方法
}}