本文版权归作者所有,仅供用来网上学习来用,读者可以收藏,请不要下载到本机和重新发布到其它网站

先看两个简单的例子,来感受一下Java的不定长度参数

第一个例子:

public class VariArgs {

public static void main(String[] args) {

test();

test("aaa");

test("aaa", "bbb");

test("aaa", "bbb", "ccc");

}

public static void test(String... args) {

System.out.println(args.getClass());

for (String arg : args) {

System.out.println(arg);

}

}

}

第二个例子:

public class VariArgs {

public static void main(String[] args) {

test("aaa");

test("aaa", "bbb");

test("aaa", "bbb", "ccc");

}

public static void test(String arg, String... args) {

System.out.println(arg);

System.out.println("----------------");

for (String s : args) {

System.out.println(s);

}

}

}

读者可以自己运行一下,这个不定长度参数的类型为String[],即字符串数组。

从上面可以看出,如果一个方法的参数定为不定参数的话,这个参数可以根据参数个数动态生成一个数组,然后传入方法执行。

不过,不定参数有两个规定:第一,方法的参数列表中最多只有一个不定长度的参数;第二,就是不定长度的数组的位置必须是最后一个参数。不然不能通过编译。

对于第一个规定,是因为如果有多于一个不定长度的参数,当真正调用这个方法的时候,JVM、将不知道前面的不定长度参数有多长, 下一个参数是从哪里开始.

对于第二个参数也是一样,编译器不知道不定长度参数的长度,无法确定从哪里开始下一个参数。

以下是几种不正确使用不定长度参数的例子,请不要这样写程序:

public static void test(Object... objs, Object obj);

public static void test(Object obj1, Object... objs, Object obj2);

public static void test(Object... objs1, Object... objs2);

不定参数的方法可以重载。(大家都知道,重载就是方法名相同,而方法的参数列表不同)

下面给出重载的示例:

public class VariArgs {

public static void main(String[] args) {

test("aaa");

test("aaa", "bbb");

test("aaa", "bbb", "ccc");

}

public static void test(Object... args) {

}

public static void test(String arg, String... args) {

}

}

读者如果细心的话,可以看出文章开头给出的两个例子的区别,就是第二个例子比第一个例子的test方法的参数多出了一个String arg,从感觉上没有太大的区别,这有点像编译原理的*和+的区别。第一个test方法指可以有0或N个String做参数,但第二个test方法指至少一个String做为参数。

然后结合重载来看,把第一个例子和第二个例子合并成一个类,得到以下代码:

public class VariArgs {

public static void main(String[] args) {

test();

test("aaa");

test("aaa", "bbb");

test("aaa", "bbb", "ccc");

}

public static void test(String... args) {

System.out.println(args.getClass());

for (String arg : args) {

System.out.println(arg);

}

}

public static void test(String arg, String... args) {

System.out.println(arg);

System.out.println("----------------");

for (String s : args) {

System.out.println(s);

}

}

}

读者可以编译下这个程序,结果是编译不通过。为什么呢?程序编译到第五行时,不能确定test("aaa")该用第10行的test方法还是第17行的方法,因为两个方法都可以有相同的参数列表。都能精确匹配上参数列表,编译器在这种情况下只好报出编译不能通过的错误。所以在重载这样的方法时,注意参数列表,不要使两个方法可以有同样的参数列表。

6

0

分享到:

2009-04-20 00:43

浏览 33123

评论

4 楼

837718860

2017-03-03

之前总会看到不定长参数,现在大概知道意思了。

3 楼

qq690388648

2014-02-18

不错,受教了!!!

2 楼

ajie1986

2009-07-14

受教了。今天在自己的工程里头一次看到不定参数,感觉自己真是孤陋寡闻啊……

1 楼

idealab

2009-04-22

长见识了@!

java 不定长参数_简单介绍Java的不定长度参数相关推荐

  1. java编译时注解_简单介绍 Java 中的编译时注解

    1. 前言 上一篇 主要介绍了什么是 注解 (Annotation) 以及如何读取 运行时注解 中的数据, 同时用注解实现了简单的 ORM 功能. 这次介绍另一部分: 如何读取 编译时注解 ( Ret ...

  2. java ear包_简单介绍Java 的JAR包、EAR包、WAR包区别

    原标题:简单介绍Java 的JAR包.EAR包.WAR包区别 WAR包 WAR(Web Archive file)网络应用程序文件,是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件.War专 ...

  3. java的移植性_详细介绍JAVA的可移植性

    软件可移植性指与软件从某一环境转移到另一环境下的难易程度.为获得较高的可移植性,在设计过程中常采用通用的程序设计语言和运行支撑环境.尽量不用与系统的底层相关性强的语言.下面介绍JAVA的可移植性. 1 ...

  4. java类成员初始化_简单了解Java类成员初始化顺序

    这篇文章主要介绍了简单了解Java类成员初始化顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类中包含7中成员: 1.静态变量 static 2 ...

  5. java的同步关键字_简单了解Java synchronized关键字同步

    简单了解Java synchronized关键字同步 发布于 2021-1-13| 复制链接 摘记:  synchronized synchronized可以用来同步块,同步方法.同步块可以用来更精确 ...

  6. java完成九宫格数独_简单实现java数独游戏

    本文实例为大家分享了java数独游戏的具体代码,供大家参考,具体内容如下 打算把javaFx需要的组件装好以后直接用javaFx的,但似乎eclipse的版本不对,安装了也不能用... 数独代码是在之 ...

  7. Java抽号系统_简单实现java抽奖系统

    简单实现java抽奖系统 发布于 2020-3-11| 复制链接 摘记: 本文为大家分享了java抽奖系统的具体代码,供大家参考,具体内容如下用户信息类 ```java /* * 用户信息类 * 1. ...

  8. java构造方法怎么写_简单了解JAVA构造方法

    怎么写 java构造方法必须满足以下语法规则: (1) 方法名必须与类名相同. (2)不要声明返回类型. (3)不能被static.final.synchronized.abstract和native ...

  9. Java最小公倍数和最大公因数_详细介绍java中最小公倍数与最大公约数

    java中最小公倍数与最大公约数import java.util.Scanner; /** * Created by Admin on 2017/3/26. */ public class test0 ...

最新文章

  1. R语言机器学习Caret包(Caret包是分类和回归训练的简称)、数据划分、数据预处理、模型构建、模型调优、模型评估、多模型对比、模型预测推理
  2. 加油!兄弟连的兄弟们!
  3. 喷水装置(一)--nyoj题目6
  4. 从案例角度解析建模平台动态规则引擎
  5. Lindley equation
  6. 如何查看linux 是否安装软件包,linux 查看软件包是否安装 linux查看软件包
  7. 一起谈.NET技术,ASP.NET 中JSON 的序列化和反序列化
  8. 记录:zlog交叉编译出aarch64的libzlog.a
  9. OPPOA83_OPPOA83T_官方线刷包_救砖包_解账户锁
  10. 关于手机游戏市场的调研方案(终结版)
  11. vs2017 自定义背景图片
  12. 高通UEFI研究[三]
  13. Apk脱壳圣战之---如何脱掉“梆梆加固”的保护壳
  14. 2021年JavaScript最新手机号码、电话号码正则表达式
  15. 终年32岁的传奇数学家,生前寂寂无闻,一个世纪后却让硅谷领袖们集体落泪致敬
  16. php java python c语言_两分钟速览Java、PHP、C语言、Python四大编程
  17. 拼多多为什么不显示评论
  18. 注册表:HKCR, HKCU, HKLM, HKU, HKCC,注册表中常用的5种数据类型
  19. Tableau图表 • 堆积发散条形图(李克特量表)
  20. hive 计算两个经纬度之间的距离

热门文章

  1. navicat连接错误
  2. 如何给客服人合理安排工作时间
  3. 破防了,程序员用Python基于ESP32做了一颗“赛博朋克”圣诞树
  4. 优秀员工突然提出离职该不该留
  5. android 存储容量 工具,AndroidStudio分析工具
  6. 互联网公司时尚穿搭指南
  7. 双榜加冕!加速科技荣登2023准独角兽中国未来独角兽双榜单
  8. 第七届全国信息技术应用水平大赛预赛试题----C语言程序设计
  9. 【开卷】第一期(下) ​海思提前批数字芯片笔试(带解析)
  10. python和我的世界什么关系_我的世界史帝夫和him是什么关系?