Java定义参数个数可变的方法:Object...objects

前言

在Java1.5之后,java允许定义形参个数可变的方法。

只要在一个形参的“类型”与“参数名”之间加上三个连续的“.”(即“…”,英文里的句中省略号),就可以让它和不确定个数实参相匹配。而一个带有这样的形参的方法,就是一个实参个数可变的方法。

例如:

public static void test1(int...ints){

}

注意,只有最后一个形参才能被定义成“能和不确定个实参相匹配”的。因此,一个方法里只能有一个这样的形参。另外,如果这个方法还有其它的形参,要把它们放到前面的位置上。

编译器会在背地里把这最后一个形参转化为一个数组形参,并在编译出的class文件里作上一个记号,表明这是个实参个数可变的方法。

例如:
形参个数可变的方法:

public static void test1(int...ints){

}

形参转化为一个数组形参的方法:

public static void test1(int[] ints){

}

定义可变个数形参方法:

可变个数形参数的方法与本类中方法名相同,参数类型也相同的数组之间不构成重载。换句话说。二者不能共存,即:void show(String…strings)和void show(String[]strings)不能共存

  • 可变个数形参的方法的形参中,必须声明在末尾
  • 可变个数形参的方法的形参中,最多只能声明一个可变形参

代码:

package test;

public class Test {
    public static void main(String[] args) {
        test1("1","一","2","二");
    }

    public static void test1(String...strings){
    	//strings被当做数组处理
        for (int i = 0; i < strings.length; i++) {
        	//使用for循环遍历输出
            System.out.println(strings[i]);
        }
    }
    package test;

public class Test {
    public static void main(String[] args) {
        test1("1","一","2","二");
        System.out.println("---");
        test2(999,"123","345");
    }

    public static void test1(String...strings){
        for (int i = 0; i < strings.length; i++) {
            System.out.println(strings[i]);
        }
    }
//需要注意的是一个方法只能定义一个长度可变的形参,长度可变的形参只能处于形参列表的最后
//比如test2()方法中的参数不能为(String...string,int a),String...strings只能处于形参列表的最后
    public static void test2(int a,String...strings){
        System.out.println(a);
        for (int i = 0; i < strings.length; i++) {
            System.out.println(strings[i]);
        }
    }
}

}

结果:
在这里插入图片描述

Object…objects

如果设置为Object...objects,就没有类型限制,因为所有的类型默认继承object。

代码:

package test;

public class Test {
    public static void main(String[] args) {
        test1(1,"2",'a',22.22);//任意传入int,string,char,double类型
    }

    public static void test1(Object...objects){
        for (int i = 0; i < objects.length; i++) {
            System.out.println(objects[i]);
        }
    }
}

结果:
在这里插入图片描述


“ . ”前后的空白字符存亡问题

根据J2SE 1.5的语法,在“…”前面的空白字符是可有可无的。这样就有在“…”前面添加空白字符(形如“Object … args”)和在“…”前面不加空白字符(形如“Object… args”)的两种写法。因为目前和J2SE 1.5相配合的Java Code Conventions还没有正式发布,所以无法知道究竟哪一种写法比较正统。不过,考虑到数组参数也有“Object [] args”和“Object[] args”两种书写方式,而正统的写法是不在“[]”前添加空白字符,似乎采取不加空白的“Object… args”的写法在整体上更协调一些。

以下几种方式都可以正常运行:

  1. “ . ”前后都不加空格:
public static void test1(int...ints){

}
  1. “ . ”前面加空格:
public static void test1(int     ...ints){

}
  1. “ . ”后面加空格:
public static void test1(int...     ints){

}
  1. “ . ”前后都加空格:
public static void test1(int     ...     ints){

}

注意:虽然空格可以随意写,但是“ . ” 只能写上3个,而且必须是连在一起的3个"...",否则就会报错

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

花伤情犹在

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

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

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

打赏作者

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

抵扣说明:

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

余额充值