java变量

Java varargs was introduced in Java 1.5. Java varargs is also known as java variable arguments.

Java varargs是Java 1.5中引入的。 Java varargs也称为Java变量参数

Java变量 (Java varargs)

varargs in java enables a method to accept variable number of arguments. We use three dots (…) also known as ellipsis in the method signature to make it accept variable arguments. For example;

Java中的varargs使方法可以接受可变数量的参数。 我们在方法签名中使用三个点(…)(也称为省略号)以使其接受可变参数。 例如;

public static int sum(int i, int...js ){
//do something
}

关于Java中的varargs的要点 (Important points about varargs in java)

Few points to know about varargs in java are;

关于Java中的varargs的几点知识是:

  1. We can have only one varargs in the method.该方法中只能有一个可变参数。
  2. Only the last argument of a method can be varargs.方法的最后一个参数只能是varargs。
  3. According to java documentation, we should not overload a varargs method. We will see why it’s not a good idea.根据Java文档,我们不应重载varargs方法。 我们将看到为什么它不是一个好主意。

java varargs如何工作? (How java varargs work?)

When we invoke a method with variable arguments, java compiler matches the arguments from left to right. Once it reaches to the last varargs parameter, it creates an array of the remaining arguments and pass it to the method. In fact varargs parameter behaves like an array of the specified type.

当我们调用带有可变参数的方法时,java编译器从左到右匹配参数。 一旦到达最后一个varargs参数,它将创建剩余参数的数组并将其传递给方法。 实际上,varargs参数的行为类似于指定类型的数组。

//method with variable arguments
public static int sum(int i, int...js ){int sum = i;for(int x : js){sum+=x;}return sum;
}//method with same implementation as sum with array as argument
public static int sumArray(int i, int[] js ){int sum = i;for(int x : js){sum+=x;}return sum;
}

If you will look at both sum and sumArray methods, you will see that the implementation body is exactly same. So we should use varargs when API offers them, for example java.io.PrintStream.printf() method but we should not take it as a replacement for array.

如果同时查看sumsumArray方法,您将看到实现主体是完全相同的。 因此,当API提供它们时,我们应该使用varargs,例如java.io.PrintStream.printf()方法,但我们不应该将其用作数组的替代品。

为什么我们不应该重载varargs方法 (Why we should not overload varargs method)

Let’s look at an example why overloading java varargs method is not a good idea.

让我们看一个示例,为什么重载java varargs方法不是一个好主意。

package com.journaldev.misc;public class VarargsExample {public static void main(String[] args) {System.out.println(sum(1));System.out.println(sum(1,2)); //compiler error, ambiguous method}public static int sum(int i, int...js ){System.out.println("sum1 called");int sum = i;for(int x : js){sum+=x;}return sum;}public static int sum(int i, int k, Object...js ){System.out.println("sum2 called");int sum = i+k;for(Object x : js){sum+=1;}return sum;}}

In above example, you will notice that compiler will not complain when we overload methods with varargs. But when we try to use it, compiler get’s confused which method to use when mapping the second argument.

在上面的示例中,您会注意到当我们使用varargs重载方法时,编译器不会抱怨。 但是,当我们尝试使用它时,编译器get会混淆在映射第二个参数时使用哪种方法。

If there is only one argument, compiler is smart to use first method because it can work with minimum one argument but second method needs at least two arguments. Below image from Eclipse shows the error message as The method sum(int, int[]) is ambiguous for the type VarargsExample.

如果只有一个参数,则编译器很聪明地使用第一个方法,因为它可以使用最少一个参数,但是第二个方法至少需要两个参数。 下图来自Eclipse,显示错误消息为The method sum(int, int[]) is ambiguous for the type VarargsExample

That’s all about java varargs. It’s good to know feature but you don’t need to use it when writing code yourself.

这就是关于Java varargs的全部内容。 知道功能很好,但是您自己编写代码时不需要使用它。

Reference: Official Documentation

参考: 官方文档

翻译自: https://www.journaldev.com/1257/java-varargs

java变量

java变量_Java变量相关推荐

  1. java变量的定义_Java变量_Java变量概念定义

    Java变量_Java变量概念定义 Java变量定义 java变量包含静态变量(static Variable).成员变量()和局部(local Variable )变量三种.其实,也可以说两种,静态 ...

  2. java数据类型_Java 变量、表达式和数据类型详解

    数据类型 一.变量 变量: 表示存储空间,可用来存放某一类型(整数.小数...)的数据,没有固定值,变量值是可变的,可重复使用,也可以用来存储某种类型的未知数据. 变量的特点: ① 占据内存中的一块存 ...

  3. java 标识变量_Java变量与数据类型之一:Java编程规范,关键字与标识符

    原标题:Java变量与数据类型之一:Java编程规范,关键字与标识符 大家好,这次要给大家带来的是Java变量与数据类型.本文是第一集:Java编程规范,关键字与标识符. 一.编程规范 任何地方的名字 ...

  4. java 静态方法 变量_Java变量的初始化及静态方法的实现

    这篇文章主要介绍了Java变量的初始化及静态方法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.变量初始化 package treat; ...

  5. Java参数变量_Java变量参数

    Java1.5添加新功能:可变参数:它适用于参数不确定性的数量,判断形势的类型.java变量参数数组操作. 特点: 1.今天的参数列表只能持续. 2.省略号(...)位于变量类型和变量名之间,前后有无 ...

  6. java 尚未初始化变量_java – “变量可能尚未初始化”

    Variable may not have been initialized 当你在方法中定义s时,你必须在某个地方初始化它,程序中的每个变量在使用它之前必须有一个值. 另一件重要的事情是,您的代码永 ...

  7. java语言环境变量_JAVA语言环境变量的设置教程

    本文主要向大家介绍了JAVA语言环境变量的设置教程,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 安装JDK到目录,我这里是C:\Java 右键点击计算机属性 在系统变量里面建 JA ...

  8. java变量数据类型_Java——变量和数据类型

    变量 变量就是一个临时存储数据的空间.那么我们把数据存在内存空间里面,怎么取呢? 举例说明: 我们可以把旅馆的一个个房间看作一个存储空间,把房间的名字"101"看成变量名,把房间类 ...

  9. java基础变量_Java基础语法之变量和常量

    上行没有"{"时,下行代码与上行首字母对齐 标识符 概述 在Java中对变量.常量.函数和语句块都是有名字的,他们的名字统称为Java标识符.是为类.对象.方法.变量.接口和自定义 ...

最新文章

  1. arm的一些概念(ARM7、Cortex-M的区别)
  2. java 根据预览图片上传_JavaSctit 利用FileReader和滤镜上传图片预览功能
  3. 【深度学生】使用深度学习阅读和分类扫描文档
  4. [ckeditor系列]ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传
  5. Polling 、Long Polling 和 WebSocket
  6. 别再搜集面经啦!小夕教你斩下NLP算法岗offer!
  7. java前期_【JAVA】前期环境配置
  8. WebSocket介绍和Socket的区别
  9. Selenium WebDriver的工作原理
  10. RBAC-基于角色的权限管理
  11. Charles使用外部代理服务器
  12. 微信获取unionid
  13. 【MySQL基础 安装】CentOS 7 Yum网络部署 最新官方MySQL5 2020_2_1
  14. 阿里云 mysql 导出数据_mysql数据库导出数据库
  15. Ubuntu双显卡切换方法总结
  16. 【Scratch-控制模块】Scratch-克隆
  17. 有谁知道iphone XR的“R”到底是什么意思?答案可能会让你们无奈
  18. 手把手教你用Python高仿一个任务管理器
  19. SpringBoot电商项目之购物车下单(沙箱支付)
  20. 首个室温超导体问世,为了发现它,科学家用废了几十颗钻石 | Nature封面-1

热门文章

  1. hive full join多表多关联键联合查询
  2. 冯·诺依曼体系结构的学习总结
  3. 中国软件服务外包IT公司最新排名-IT外包最强前50名
  4. Carson带你学Android:这是一份全面详细的属性动画学习攻略!
  5. Python中找出dataframe中的重复的行 DataFrame.duplicated()方法
  6. mysql中的四种注释
  7. android 远距离识别,远距离 人脸识别!
  8. 电机控制要点解疑:SPWM,SVPWM和矢量控制
  9. 英语计算机主板接口有,主板上常见英文的解释
  10. 前端安全之XSS攻击详解