可变参数
可变参数又称参数个数可变,用作方法的形参出现,那么方法参数个数就是可变的了
格式如下
修饰符 返回值类型 方法名(数据类型...变量名){}
格式范例如下
xxxxxxxxxx
public 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
可变参数使用的练习
xxxxxxxxxx
package 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集合没有带索引的方法
}
}