可变参数讲解

我们在实际的开发中,通常会遇到参数不确定多少个  不确定什么类型方法,那么在这种情况在我们该如何定义参数列表呢?


Object[ ] 等一会我们对比 可变长参数的区别

场景:::当一个方法的参数个数不确定的时候,要使用可变参数

 Sun  JDK1.5新增语法,新特性,动态参数或者是可变参数的意思。 

可变长参数定义:
可变长参数是一种参数集合,在集合中参数的数量的不确定的,可能为一个或者多个,
也可能没有参数;在这个参数集合中的每个参数类型是不确定的,我们将这个参数集合称之为可变的长参数集合。(有序按照存放的顺序)
格式:
(数据类型...变量名)


于Object是所有类型的父类,可以包含所有的类型
由于参数的类型不是固定的,那么我们就用Object类型来接收参数,Object参数是所有类型的父类,定义方法为:
数据类型...变量名
Object...obj  可变长参数
也有其他类型 例如我们不确定多少个string类型的参数   String...str

 private static void function(Object...obj);
针对于我定义的来讲   对于可变参数的定义方法而言,它表示在方法名为function中有不确定数量的、类型为Object的多个或0个参数的方法,
obj表示为参数集合的名字,类似于数组的用法。

定义中利用“...”来表示不确定数量和类型的参数集合。

为了方便理解,我们写一个函数体,其具体功能为:判断方法中是否有参数,如果没有打印输出提示信息,可以识别参数的个数以及类型,并且把他们打印输出
看看里面存的到底是什么 ,什么类型       打开Paramss.java演示

关于getClass()方法解析:
面对参数类型和参数个数未知的函数并非束手无策,首先对与参数的类型的不确定我们可以设置参数集合的类型为Object类型来解决问题,
由于Object是所有类型的父类,可以包含所有的类型,至于原来参数的类型可以在参数遍历中使用方法obj[i].getClass().getSimpleName();
来获得参数的原本类型。
getClass()方法属于Object的一部分,他将打印输出对象所在的类。


看看里面存的到底是什么    打开Overload.java演示
语法注意事项
*关于可变参数的定义的注意事项如下:
1.1.在调用时可变参数的方法和固定参数的方法如果同时匹配,那么固定参数的方法优先,调用固定参数的方法而不调用可变参数的方法
1.22.两个相同类型的不定参数方法隶属于同一方法。
1.33.可变参数可以和固定参数搭配使用,但是可变参数一定要是所有参数中的最后一个参数。

Object[ ]和可变长参数的区别    打开Objectss.java演示
1  params  可以为空调用    Object不能为空调用  
2  方法重载,当使用调用时,优先调用后者(相同)。

3..test(String...str)能不能与test(String[] array)重载  ? NO
4.Object[ ] 可以定义多个搭配使用         可变长参数只可以一个
5. Object[]可以和可变长参数在一起

语法总结:
格式:
? 修饰符? 返回值类型? 方法名(数据类型...变量名){...}
例如
print(String... args){
   ...

注意事项总结
 JDK1.5新增语法,新特性,动态参数或者是可变参数的意思。 
(1)使用…将参数声明成可变长参数。 
(2)可变长参数必须是最后一个参数。 
(3)可变参数同时可以跟固定的参数混合使用,但是一个方法的参数中不能同时拥有2种类型的可变参数。两个相同类型的不定参数方法隶属于同一方法(不是重载)
(4)在调用时可变参数的方法和固定参数的方法如果同时匹配,那么固定参数的方法优先,调用固定参数的方法而不调用可变参数的方法
(5)可变参数可以和固定参数搭配使用,但是可变参数一定要是所有参数中的最后一个参数。


public class EmplyoyeeTest {
    private Scanner sc;

    @Test
    public void EmployeeSystemTest(){
        sc = new Scanner(System.in);
        Select:while(true){
            System.out.println("☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆WELCOM TO  EmployeeManagere☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆");
            Menu.getlistSelect().forEach(System.out::println);
            System.out.println("请输入您的选项");
            String selectMenu = sc.next();
            switch(selectMenu){
            case "1": ListEmployee.ListEmployees(); break;//登录/注册员工系统
            case "2": ListManage.ListManager(); break;//登录/注册部门管理员系统
            case "3": break Select;//退出登录
            default: System.out.println("您输入的信息有误,请重新输入"); break;
            }
        }
        
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从入门小白到小黑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值