Java不定参数

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

Java代码  收藏代码
  1. public class VariArgs {  
  2.   
  3.     public static void main(String[] args) {  
  4.         test();  
  5.         test("aaa");  
  6.         test("aaa", "bbb");  
  7.         test("aaa", "bbb", "ccc");  
  8.     }  
  9.   
  10.     public static void test(String... args) {  
  11.         System.out.println(args.getClass());  
  12.         for (String arg : args) {  
  13.             System.out.println(arg);  
  14.         }  
  15.     }  
  16. }  


第二个例子: 

Java代码  收藏代码
  1. public class VariArgs {  
  2.   
  3.     public static void main(String[] args) {  
  4.         test("aaa");  
  5.         test("aaa", "bbb");  
  6.         test("aaa", "bbb", "ccc");  
  7.     }  
  8.   
  9.     public static void test(String arg, String... args) {  
  10.         System.out.println(arg);  
  11.         System.out.println("----------------");  
  12.         for (String s : args) {  
  13.             System.out.println(s);  
  14.         }  
  15.     }  
  16. }  


   读者可以自己运行一下,这个不定长度参数的类型为String[],即字符串数组。 
从上面可以看出,如果一个方法的参数定为不定参数的话,这个参数可以根据参数个数动态生成一个数组,然后传入方法执行。 
    不过,不定参数有两个规定:第一,方法的参数列表中最多只有一个不定长度的参数;第二,就是不定长度的数组的位置必须是最后一个参数。不然不能通过编译。 
    对于第一个规定,是因为如果有多于一个不定长度的参数,当真正调用这个方法的时候,JVM、将不知道前面的不定长度参数有多长, 下一个参数是从哪里开始. 
    对于第二个参数也是一样,编译器不知道不定长度参数的长度,无法确定从哪里开始下一个参数。 
    以下是几种不正确使用不定长度参数的例子,请不要这样写程序: 

Java代码  收藏代码
  1. public static void test(Object... objs, Object obj);  
  2.   
  3. public static void test(Object obj1, Object... objs, Object obj2);  
  4.   
  5. public static void test(Object... objs1, Object... objs2);  


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

Java代码  收藏代码
  1. public class VariArgs {  
  2.   
  3.     public static void main(String[] args) {  
  4.         test("aaa");  
  5.         test("aaa", "bbb");  
  6.         test("aaa", "bbb", "ccc");  
  7.     }  
  8.   
  9.     public static void test(Object... args) {  
  10.     }  
  11.   
  12.     public static void test(String arg, String... args) {  
  13.     }  
  14. }  


   读者如果细心的话,可以看出文章开头给出的两个例子的区别,就是第二个例子比第一个例子的test方法的参数多出了一个String arg,从感觉上没有太大的区别,这有点像编译原理的*和+的区别。第一个test方法指可以有0或N个String做参数,但第二个test方法指至少一个String做为参数。 
   然后结合重载来看,把第一个例子和第二个例子合并成一个类,得到以下代码: 

Java代码  收藏代码
  1. public class VariArgs {  
  2.   
  3.     public static void main(String[] args) {  
  4.         test();  
  5.         test("aaa");  
  6.         test("aaa", "bbb");  
  7.         test("aaa", "bbb", "ccc");  
  8.     }  
  9.   
  10.     public static void test(String... args) {  
  11.         System.out.println(args.getClass());  
  12.         for (String arg : args) {  
  13.             System.out.println(arg);  
  14.         }  
  15.     }  
  16.   
  17.     public static void test(String arg, String... args) {  
  18.         System.out.println(arg);  
  19.         System.out.println("----------------");  
  20.         for (String s : args) {  
  21.             System.out.println(s);  
  22.         }  
  23.     }  
  24. }  


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

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

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

相关文章

「mysql优化专题」主从复制面试宝典!面试官都没你懂得多!(11)

内容较多,可先收藏,目录如下: 一、什么是主从复制 二、主从复制的作用(重点) 三、主从复制的原理(重中之重) 四、三步轻松构建主从 五、必问面试题干货分析(最最重要的点&#xff09…

为什么WordPress网站应尽量避免使用过多插件

前几天,我们在给一个客户优化其企业网站时,发现其网站使用了太多的WordPress插件。WP插件可以扩展网站的功能;然而如果使用不当,也会给网站带来一些负面的影响。在这篇文章中,WPChina.org就给大家介绍一下,…

OracleApps Dropship 流程

做的一个Dropship流程的实录(包括流程期间遇到问题的解决)What are the advantages of Drop Shipment Orders?These are the benefits: No inventory is required Reduced order fulfillment processing costs Reduced flow times Elimination of losses on non-sellable …

word取消下一页_word文档页码设置及文中小箭头清除办法

在很长一段时间里,朋友圈流传的这样一段话:世人慌慌张张,不过图碎银几两;可偏偏就是这几两碎银,能免饥荒,能定安康 ,能解世人惆怅。。。问:word怎么从第二页开始加页码答&#xff1a…

一起写框架-Ioc内核容器的实现-对象的调用-属性注入容器的对象(十)

实现功能 需求:在类的成员属性使用Autowirde注解注入容器中的对象。 实现思路 要实现这个功能。我们首先要思考一个问题:类与类的关系是在调用的建立的,还是说在创建对象的时候就就将建立了? ---我实现的方案是,在在程…

2064: 分裂 - BZOJ

Description 背景: 和久必分,分久必和。。。 题目描述: 中国历史上上分分和和次数非常多。。通读中国历史的WJMZBMR表示毫无压力。 同时经常搞OI的他把这个变成了一个数学模型。 假设中国的国土总和是不变的。 每个国家都可以用他的国土面积代…

android h5使用缓存_Android SDK 的 H5 打通方案演进 | 数据采集

一、前言近年来,混合开发越来越流行,App 与 H5 的打通需求也越来越迫切。那什么是 App 与 H5 打通呢?所谓 “打通”,是指 H5 集成 JavaScript 数据采集 SDK 后,H5 触发的事件不直接同步给服务端,而是先发给…

简单人物画像_你真的理解用户画像吗?| 船说

“「设计师沙龙」是ARK下半年开始逐渐形成的传统,由ARKers自发组织,分为视觉和交互两类,每月各举办一次。大家围绕一个话题展开,聊聊行业最新案例和工作上的心得,帮助大家共同进步。ARKers表达的观点均为个人见解&…

emoji表情引发的JNI崩溃

今天突然接到客服那边的反馈说,有玩家反馈进游戏后不久就崩溃了,我先是怀疑网络问题,因为一连接聊天成功后就挂了。之后用logcat抓日志,发现挂在jni那里了 JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8…

8cm等于多少像素_「前端剑指offer第5期」物理像素、逻辑像素、CSS像素、PPI、设备像素比是什么...

# 提问物理像素、逻辑像素、CSS像素、PPI、设备像素比是什么?# 回答物理像素代表屏幕上有多少个点,比如1080x2340表示屏幕一排包含1080个物理像素点。逻辑像素表示屏幕展示物体的视觉尺寸是多少。逻辑像素相同表示物体看起来或者打印出来大小一样&#x…

php中获取系统信息的方法

2019独角兽企业重金招聘Python工程师标准>>> $root getenv(DOCUMENT_ROOT); 服务器文档根目录$port getenv(SERVER_PORT); 服务器端口$file getenv(SCRIPT_NAME); 当前执行文件$ua getenv(HTTP_USER_AGENT); 用户UA$method getenv(REQUEST_METHOD); 请求方法$p…

[独家全程图解]ThinkPHP6框架的下载与安装

http://www.php.cn/wenda/159638.html 1. ThinkPHP大事记 2017年4月27日,ThinkPHP5.1-beta.1发布 2017年12月31日, ThinkPHP5.1.0发布,标志着快速进入迭代期 2019年3月3日, ThinkPHP5.1已更新迭代到第35个版本(5.1.35) 2019年3月22日, ThinkPHP5.2的 dev 开发版本也发布了 …

玩转CSS3(一)----CSS3实现页面布局

请珍惜小编劳动成果,该文章为小编原创,转载请注明出处。 摘要: CSS3相对CSS2增加了一些新的布局方式:多栏布局和盒子布局。在这篇文章中,将对CSS2的布局进行简单的回忆,并总结CSS3的布局方式。DIVCSS其实是…

openglshader实现虚拟场景_云桌面,实现办公终端的统一管理与运维

随着无纸化办公和智能化办公的不断推进,在办公过程中传统PC电脑的缺点愈发凸显。传统电脑的性能会随着使用时长增加而降低,系统维护处理时效性较弱,出现问题需要运维人员到现场解决,费时费力。如果出现更换设备的情况,…

前端 == Ajax

Django-Ajax 1.目录 ajax 准备知识:json ajax 简介 jquery 实现的ajax js 实现的ajax jquery.serialize() 上传文件 同源策略与jsonp 2.准备知识:json 1.什么是 json ? 个人回答: json 的作用是 数据交换格式。(通过序列化和反序…

WordPress 5.0 换回老版”Classic Editor”经典编辑器教程

WordPress 5.0 正式采用了全新的“Block Editor”编辑器,从而替换了原有“Classic Editor”编辑器,相信有很多人和子凡一样会不习惯或者不喜欢新编辑器,那么新版 WordPress 该如何换回原来的 WordPress 编辑器呢? 不可否认 WordPr…

html5视频播放

<video width"320" height"240" controls"controls"> <source src"test.mp4" type"video/mp4"> Your browser does not support the video tag. </video> IE9对于video标签确实是不支持的&…

判断是否存在此对象_JVM的垃圾回收机制,判断对象是否死亡

这节我们主要讲垃圾收集的一些基本概念&#xff0c;先了解垃圾收集是什么、然后触发条件是什么、最后虚拟机如何判断对象是否死亡。一、前言我们都知道Java和C有一个非常大的区别就是Java有自动的垃圾回收机制&#xff0c;经过半个多世纪的发展&#xff0c;Java已经进入了“自动…

Software--Developer Tools_

Log4net 日志框架 由 Java log4j 移植到 .Net 平台的开源日志框架。 http://logging.apache.org/log4net/index.html 转载于:https://www.cnblogs.com/masterSoul/p/7832317.html