java 三个点_Java,参数中的3个点

是瓦拉格斯 :)

varargs是可变长度参数的缩写,它允许方法接受可变数量的参数(0或更多)。使用varargs,创建需要使用可变数量参数的方法变得非常简单。在Java 5中添加了变量参数的特性。

varargs语法

在数据类型之后,一个vararg由三个省略号(三个点)组成,其一般形式是return_type method_name(data_type ... variableName){}

对静脉曲张的需求

在Java 5之前,如果需要可变数量的参数,有两种方法来处理

如果一个方法可以接受的参数的最大值很小且已知,则可以创建该方法的重载版本。如果方法可以使用的参数的最大数量很大或/且未知,则方法是将这些参数放入数组中,并将它们传递给以数组为参数的方法。这两种方法都很容易出错-每次都要构造一个参数数组,而且很难维护-因为添加新的参数可能会导致编写一个新的重载方法。

静脉曲张的优点

提供了一个简单得多的选择。减少代码,因为不需要编写重载的方法。

静脉曲张的例子public class VarargsExample {

public void displayData(String ... values){

System.out.println("Number of arguments passed " + values.length);

for(String s : values){

System.out.println(s + " ");

}

}

public static void main(String[] args) {

VarargsExample vObj = new VarargsExample();

// four args

vObj.displayData("var", "args", "are", "passed");

//three args

vObj.displayData("Three", "args", "passed");

// no-arg

vObj.displayData();

}}OutputNumber of arguments passed 4var

args

are

passed

Number of arguments passed 3Three args

passed

Number of arguments passed 0

从程序中可以看出,这里使用长度来查找传递给该方法的参数。这是可能的,因为varargs被隐式地作为数组传递。任何作为varargs传递的参数都存储在一个数组中,该数组通过给varargs的名称来引用。在这个程序中,数组名是值。还请注意,方法是以不同数量的参数调用的,首先调用四个参数,然后调用三个参数,然后调用零参数。所有这些调用都由使用varargs的相同方法处理。

带静脉曲张的限制

可以在方法中使用varargs参数的其他参数,但是在这种情况下,varargs参数必须是该方法声明的最后一个参数。void displayValues(int a, int b, int … values) // OK

void displayValues(int a, int b, int … values, int c) // compiler error

varargs的另一个限制是必须只有一个varargs参数。void displayValues(int a, int b, int … values, int … moreValues) // Compiler error

超负荷varargs方法

可以重载接受varargs参数的方法。Varargs方法可以通过-

其vararg参数的类型可能不同。通过添加其他参数。超负荷varargs方法实例public class OverloadingVarargsExp {

// Method which has string vararg parameter

public void displayData(String ... values){

System.out.println("Number of arguments passed " + values.length);

for(String s : values){

System.out.println(s + " ");

}

}

// Method which has int vararg parameter

public void displayData(int ... values){

System.out.println("Number of arguments passed " + values.length);

for(int i : values){

System.out.println(i + " ");

}

}

// Method with int vararg and one more string parameter

public void displayData(String a, int ... values){

System.out.println(" a " + a);

System.out.println("Number of arguments passed " + values.length);

for(int i : values){

System.out.println(i + " ");

}

}

public static void main(String[] args) {

OverloadingVarargsExp vObj = new OverloadingVarargsExp();

// four string args

vObj.displayData("var", "args", "are", "passed");

// two int args

vObj.displayData(10, 20);

// One String param and two int args

vObj.displayData("Test", 20, 30);

}}OutputNumber of arguments passed 4var

args

are

passed

Number of arguments passed 210 20

a TestNumber of arguments passed 220 30

Varargs与超载歧义

在某些情况下,当我们有重载varargs方法时,调用可能是模棱两可的。让我们看看一个例子public class OverloadingVarargsExp {

// Method which has string vararg parameter

public void displayData(String ... values){

System.out.println("Number of arguments passed " + values.length);

for(String s : values){

System.out.println(s + " ");

}

}

// Method which has int vararg parameter

public void displayData(int ... values){

System.out.println("Number of arguments passed " + values.length);

for(int i : values){

System.out.println(i + " ");

}

}

public static void main(String[] args) {

OverloadingVarargsExp vObj = new OverloadingVarargsExp();

// four string args

vObj.displayData("var", "args", "are", "passed");

// two int args

vObj.displayData(10, 20);

// This call is ambiguous

vObj.displayData();

}}

在这个程序中,当我们在没有任何参数的情况下调用Displaydata()方法时,它会抛出错误,因为编译器不确定此方法调用是否用于displayData(String ... values)或displayData(int ... values)

如果我们有重载方法,其中一个方法具有vararg方法的一种类型,另一种方法有一个参数,vararg参数的类型相同,那么我们也有歧义-作为Exp-displayData(int ... values)和displayData(int a, int ... values)

这两个重载的方法总是有歧义的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/557902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

时钟频率(HZ)与数据传输速率(bit/s)

时钟频率(HZ)与数据传输速率(bit/s)两者是相同的概念。 举例:IIC传输位速率在标准模式下可达100kbit/s,其中100kbit/s 是指1秒钟传输100kbit。1个时钟脉冲只能传输1bit数据。1秒中内要传输100kbit数据&…

java类的定义的实例_《Java基础知识》Java类的定义及其实例化

类必须先定义才能使用。类是创建对象的模板,创建对象也叫类的实例化。下面通过一个简单的例子来理解Java中类的定义:public classDog {String name;intage;void bark()//汪汪叫{System.out.println("汪汪,不要过来");}voidhungry(){System.out.println(&q…

[问题]假定网络中的路由器B的路由表有如下的项目(这三列分别表示“目的网络”、“距离”和“下一跳路由器”):

[问题]假定网络中的路由器B的路由表有如下的项目(这三列分别表示“目的网络”、“距离”和“下一跳路由器”): N1 7 A N2 2 C N6 8 F N8 4 E N9 4 F 现在B收到从C发来的路由信息(这两列分别表示“目的网络”“距离”)&…

excel mysql插件_智分析Excel插件

智分析Excel插件官方版是一款好用的自助分析云平台,智分析Excel插件官方版是一款面向业务用户的EXCEL插件工具,智分析Excel插件官方版支持各类云端数据库、本地excel数据导入功能,软件能够将本地数据和线上数据结合起来分析。软件可以帮助办公…

controller中返回数据

1.返回ModelAndView 无敌的 带着数据返回路径 (不建议使用) 复制代码 2 //第一种返回ModelAndView 3 // //入门程序 第一 包类 类包 方法名 4 RequestMapping(value “/item/itemlist.action”) 5 public ModelAndView itemList(){ 6 //从Mysql中查询…

登录用户名和密码相同问题

当用户登录时,出现用户名和密码相同的情况,会出现异常TooManyResultsException,因为mybatis的底层会调用selectOne方法,返回多个结果出现异常 解决办法:不允许出现用户名同名,在添加的时候先对数据库中的数…

java访问本地文件_java 读取本地文件 更改

/*** Title: MakeHtml* Description: 创建html*paramfilePath 设定模板文件*paramconent 替换的内容*paramdisrPath 生成html的存放路径*paramfileName 生成html名字*returnvoid 返回类型*throws*/public static voidMakeHtml(String filePath,String conent,String disrPath,S…

HTML中如何给HTML元素添加事件

HTML中如何给HTML元素添加事件 方法一&#xff1a; 代码示例&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script>function test(){alert("执行了");}</script><…

kewail node 短信_nodejs短信验证

nodejs短信验证申请配置信息&#xff1a;1.短信验证&#xff1a;阿里大鱼(http://www.alidayu.com/)2.创建应用3.下载nodejs的sdk下载super-alidayu短信验证组件[rootlocalhost aldy]#npm install super-alidayu --save[rootlacalhost aldy]#vim app.jsconst AliDaYu require(…

SpringBoot项目@Email不起作用

SpringBoot项目Email不起作用 新版本springboot要加上 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>

debian 安装java_debian9安装jdk1.8

//先跟新可用安装信息apt-get update//查看可以安装的jdk版本apt-cache search jdk//会显示如下内容&#xff1a;openjdk-8-dbg - Java runtime based on OpenJDK (debugging symbols)openjdk-8-demo - Java runtime based on OpenJDK (demos and examples)openjdk-8-doc - Ope…

yml和properties的加载顺序

yml和properties的加载顺序 正常的情况是先加载yml&#xff0c;接下来加载properties文件。如果相同的配置存在于两个文件中。最后会使用properties中的配置。最后读取的优先级最高。 两个配置文件中的端口号不一样会读取properties中的端口号。

python实现简单的名字管理系统_python列表使用实现名字管理系统

python列表使用实现名字管理系统来源&#xff1a;中文源码网 浏览&#xff1a; 次 日期&#xff1a;2019年11月5日【下载文档: python列表使用实现名字管理系统.txt 】(友情提示:右键点上行txt文档名->目标另存为)python列表使用实现名字管理系统本文实例为大家分享了…

ssm项目搭建

系统环境搭建 Spring的jar包11个 com.springsource.org.aopalliance-1.0.0.jar //Aopi联盟的jar包遵循其规则 com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar //面向切面编程 spring-aop-5.0.1.RELEASEjar //实现aop spring-aspects-5.0.1.RELEASEjar //aspect整合的…

【计算机网络】——习题解析:一个UDP用户数据的数据字段为8192字节,在数据链路层要使用以太网来传输,试问应当划分为几个IP数据报片?说明每一个IP数据报字段长度和片偏移字段的值

【计算机网络】——习题解析&#xff1a;一个UDP用户数据的数据字段为8192字节&#xff0c;在数据链路层要使用以太网来传输&#xff0c;试问应当划分为几个IP数据报片&#xff1f;说明每一个IP数据报字段长度和片偏移字段的值 答&#xff1a;6个数据字段的长度&#xff1a;前5…

java网络接口_java网络编程之识别示例 获取主机网络接口列表

importjava.net.*;importjava.util.Enumeration;publicclassInetAddressExample{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubtry{//获取主机网络接口列表EnumerationinterfaceListNetworkInterface.getNetworkInterfaces();//检测接口列表是否为空,即使…

网络协议,各层功能,各层协议

一、OSI七层模型 OSI七层协议模型主要是&#xff1a;应用层&#xff08;Application&#xff09;、表示层&#xff08;Presentation&#xff09;、会话层&#xff08;Session&#xff09;、传输层&#xff08;Transport&#xff09;、网络层&#xff08;Network&#xff09;、数…

vc2010 mysql5.7_VC2010利用MySQL++访问mysql. 及连接池示例

参加这个哥们的博客http://www.voidcn.com/article/p-mfnvxzca-cd.html 我的一个测试例子&#xff0c;用到了blob&#xff1b; #include #include #include #include #include using namespace mysqlpp; using namespace std; sql_create_3(sorttest,1,3,sql_int_unsigned,id,s…

java中下拉框select和单选按钮的回显操作

1.下拉框select的回显 <select name"departmentId" id"departmentId"><option value"0">请选择部门</option><c:forEach items"${departmentList }" var"department"><!-- 下拉框回显 -->&l…

fastdfs java token_fastdfs-client-java操作fastdfs

一、在https://github.com/happyfish100/fastdfs-client-java 下载客户端&#xff0c;解压后并执行ant命令&#xff0c;在E:\tools\libs\fastdfs\fastdfs-client-Java-master\src\build下会生成fastdfs_client.jar如图示二、mvn安装fastdfs_client.jar&#xff0c;在cmd中执行命…