Java可变参数以及一个简单应用
2019-06-13 22:46
1626 查看
(Creative Commons)
一、背景
写代码的时候接触到了Java可变参数,顺便断点调试观察了一下表现,有个别地方确实有些意外。
虽然用起来不难,但是趁机想彻底了解这个语言特性,在此总结一下。
二、可变参数介绍
2.1 定义
可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。
注意:可变参数必须位于最后一项。
2.2 特点
- 只能出现在参数列表的最后;
- ...位于变量类型和变量名之间,前后有无空格都可以;
- 调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
三、例子
工具类代码:
[code]public class ParamCheckUtil3 { /** * 所有都为null */ public static boolean allNull(Object param1, Object... params) { if (param1 != null) { return false; } if (params == null) { return true; } for (Object param : params) { if (param != null) { return false; } } return true; } /** * 所有都不为null */ public static boolean allNotNull(Object param1, Object... params) { if (param1 == null) { return false; } if (params == null) { return false; } for (Object param : params) { if (param == null) { return false; } } return true; } }
那么想到了几个问题:
1、 为啥第一个参数要单独写?
之前也看到过可变参数的前面还写同类型参数的情况,这种情况是因为必须有一个以上的参数。
2、当调用时只传一个参数效果是啥样?
Assert.assertTrue(ParamCheckUtil3.allNull(null));
3、当调用时传两个参数,第二个是null效果是啥样?
Assert.assertTrue(ParamCheckUtil3.allNull(null, null));
这里可变参数并不是一个只含有null的单个元素的数组,而是null。
如果第二个不是null呢?
Assert.assertFalse(ParamCheckUtil3.allNull(null, 2));
发现是含有一个元素的数组。
如果更多参数,则可变参数依然是数组。
四、结论
可变参数的核心是将参数封装为数组,但是传入null时并不是只含有一个null元素的数组,而是null。
可变参数方便调用者传入不数量的参数且不需要在前面非常不优雅的构造数组对象。
五、思考
我们开发过程中正确接触到某块知识,可以进源码去看源码怎么写的,也可以写demo去断点研究下表现。
这样才能提高的更快,否则永远只是会用,永远只是知道最常用的,看啥都觉得简单,但是学啥都不太深入,讨论问的的时候或者面试的时候问的稍微深点就不会了。
总之学习是一种态度,学习是一种能力,带着一颗学习研究的心态,不忘初心,砥砺前行。
创作不易,如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。
另外欢迎加入我的知识星球,知识星球ID:15165241 一起交流学习。
https://t.zsxq.com/Z3bAiea 申请时标注来自CSDN。
相关文章推荐
- 编写一个可变参数的C函数——头文件stdarg.h中宏va_start ,va_arg和va_end的应用
- 写一个简单的可变参数的C函数
- android TimerTask 的简单应用,以及java.lang.IllegalStateException: TimerTask is scheduled already错误的解决方法【转】
- c中可变长参数的简单应用
- java中可变参数的简单介绍
- java定时框架Quartz的简单应用(附:读取properties文件参数代码)
- 类模板作为函数参数以及作为类模板参数的一个简单示例
- java中类集的应用,简单的一个图书超市的例子
- android TimerTask 的简单应用,以及java.lang.IllegalStateException: TimerTask is scheduled already错误的解决方法
- Java-JDK5.0的简单新特性(静态导入,可变参数,增强型for循环,自动拆装箱)
- Java基础随笔之重载、重写、以及可变参数
- Java编程的逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库
- 用类名做方法的返回值类型 在学习Java的初始阶段,很多同学使用基本数据类型定义变量和引用类型定义变量以及使用类名做方法的返回值类型常常不知所以。今天我以自己的解读方式和个人的理解作一个简单的解释,和
- 利用memcached java client一个简单的应用
- 利用memcached java client一个简单的应用
- 一个简单的例子,证明JAVA参数是通过值传递
- java新特性之方法重载中可变参数应用
- JAVA基础学习之IP简述使用、反射、正则表达式操作、网络爬虫、可变参数、了解和入门注解的应用、使用Eclipse的Debug功能(7)
- 一个简单的Java程序例子以及其几种注释
- 一个包含Jersey库的简单Web Service以及一个发送Json数据的Java客户端