前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java可变参数以及一个简单应用

Java可变参数以及一个简单应用

作者头像
明明如月学长
发布2021-08-31 14:36:37
3420
发布2021-08-31 14:36:37
举报
文章被收录于专栏:明明如月的技术专栏

一、背景

写代码的时候接触到了Java可变参数,顺便断点调试观察了一下表现,有个别地方确实有些意外。

虽然用起来不难,但是趁机想彻底了解这个语言特性,在此总结一下。

二、可变参数介绍

2.1 定义

    可变参数:适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。

    注意:可变参数必须位于最后一项。

2.2 特点

  1. 只能出现在参数列表的最后; 
  2. ...位于变量类型和变量名之间,前后有无空格都可以;
  3. 调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。

三、例子

工具类代码:

代码语言:javascript
复制
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、当调用时只传一个参数效果是啥样?

代码语言:javascript
复制
Assert.assertTrue(ParamCheckUtil3.allNull(null));

3、当调用时传两个参数,第二个是null效果是啥样?

代码语言:javascript
复制
Assert.assertTrue(ParamCheckUtil3.allNull(null, null));

这里可变参数并不是一个只含有null的单个元素的数组,而是null。

如果第二个不是null呢?

代码语言:javascript
复制
Assert.assertFalse(ParamCheckUtil3.allNull(null, 2));

发现是含有一个元素的数组。

如果更多参数,则可变参数依然是数组。

四、结论

可变参数的核心是将参数封装为数组,但是传入null时并不是只含有一个null元素的数组,而是null。

可变参数方便调用者传入不数量的参数且不需要在前面非常不优雅的构造数组对象。

五、思考

我们开发过程中正确接触到某块知识,可以进源码去看源码怎么写的,也可以写demo去断点研究下表现。

这样才能提高的更快,否则永远只是会用,永远只是知道最常用的,看啥都觉得简单,但是学啥都不太深入,讨论问的的时候或者面试的时候问的稍微深点就不会了。

总之学习是一种态度,学习是一种能力,带着一颗学习研究的心态,不忘初心,砥砺前行。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/06/13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、可变参数介绍
    • 2.1 定义
      • 2.2 特点
      • 三、例子
      • 四、结论
      • 五、思考
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档