Java 可变参数(类型... 形参名)

本文介绍了Java中变长参数的使用方法,通过示例代码展示了如何定义和调用接受不定数量参数的方法。此外,还提供了运行效果以验证实现的正确性。

今天在看 cocos2d-android 源码时发现 Java 有参数列表这样的写法:

public static CCMenu menu(CCMenuItem... items) {
        return new CCMenu(items);
    }

挺有意思的,CCMenuItem... items 表示函数可以接收 0 到多个类型为 CCMenuItem 的参数,下面是一些测试代码:


public class MainTest {

	public MainTest() {}

	public static void main(String[] args) {
		String[] strs = {"Zero","First", "Second", "Third"};
		testMultiParams();
		testMultiParams(strs);
		testMultiParams("test0","test1", "test2");
	}

	public static void testMultiParams(String... strs) {
		System.out.println("----------------------------------------------");
		if( strs.length == 0)
			System.out.println("You have not set the Parameter");
		for(int i = strs.length - 1; i >= 0; i--) {
			System.out.println("The "+ i +" Param : " + strs[i]);
		}
	}
}

运行的效果如下:



### 可变参数 `int...` 的使用和注意事项 在 Java 中,`int...` 是一种特殊的参数类型,称为可变参数(variable arguments),它允许方法接受不定数量的 `int` 类型参数。这种机制本质上是将多个参数封装为一个数组,从而简化方法调用和参数传递。 #### 使用方式 可变参数的声明格式为 `数据类型... 形参`,例如: ```java public int sum(int... nums) { int res = 0; for (int i = 0; i < nums.length; i++) { res += nums[i]; } return res; } ``` 在调用时,可以传入任意数量的整数参数,包括 0 个,例如: ```java sum(); // 等价于 new int[0] sum(1); // 等价于 new int[]{1} sum(1, 2, 3, 4); // 等价于 new int[]{1, 2, 3, 4} ``` 方法内部将 `nums` 视为数组,因此可以通过数组操作访问每个参数值[^1]。 #### 注意事项 - **位置限制**:可变参数必须位于方法参数列表的最后。例如,`public int sum(String str, int... nums)` 是合法的,但 `public int sum(int... nums, String str)` 是非法的。 - **唯一性**:参数列表中只能有一个可变参数。例如,`public int sum(int... a, int... b)` 是不允许的。 - **兼容性**:可变参数可以接受数组作为输入,例如 `sum(new int[]{1, 2, 3})`。 - **空参处理**:如果未传入任何参数Java 会创建一个长度为 0 的数组,而不是 `null`,因此无需担心空指针异常[^1]。 #### 应用场景 可变参数适用于需要灵活参数数量的场景,例如: - 计算多个数值的总和、平均值等数学操作。 - 构建通用的打印或日志方法。 - 简化多个参数的传递,避免频繁重载方法。 例如: ```java public static int getSum(int... args) { int sum = 0; for (int i : args) { sum += i; } return sum; } ``` 该方法可以接受任意数量的整数,并返回它们的总和[^3]。 #### 原理说明 可变参数的本质是数组。在编译阶段,Java 编译器会将传入的多个参数自动封装为一个数组。因此,`int...` 实际上等价于 `int[]`,只是在调用语法上更加简洁和直观[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值