数组初始化、可变参数列表、枚举类型 --《JAVA编程思想》17

今天我们来了解三个方面的内容:数组初始化、可变参数列表、枚举类型。

一、数组初始化

数组是将相同类型的对象封装到一起的序列。

定义数组只需在类型后方加上 [ ] 即可, 拥有两种表示方式:

    /**
     * 第一种(符合大多数人的编程习惯,推荐使用此种)
     */
    int[] array1;
    /**
     * 第二种
     */
    int array2[];

此时定义的数组 array 尚未进行初始化,数组在初始化时,必须指定数组长度,数组的初始化也拥有两种选择:

(1)在定义的时候直接进行初始化并赋值

(2)先定义指定长度的空数组,通过数组的下标,对数组内的元素赋值

    public static void main(String[] args) {
        int[] array1 = {1, 2, 3, 4, 5};

        int[] array2 = new int[5];

        for (int i = 0; i < 5; i++) {
            array2[i] = i + 1;
        }
        System.out.println(Arrays.toString(array1));
        System.out.println(Arrays.toString(array2));
    }
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

数组的下标从 0 开始,最大的下标为 (数组的长度-1),可以通过 length 函数来获取数组的长度。

    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5};
        System.out.println(array.length);
    }
5

二、可变参数列表

可变参数列表用于参数个数未知或者参数类型未知(所有的对象都可以用 object 接收)的场合。

    public static void printArray(Object... args) {
        System.out.println("开始打印");
        for (Object arg : args) {
            System.out.println(arg);
        }
    }

    public static void main(String[] args) {
        printArray(new Integer(1), new Double(4.2), "str");
        printArray();
    }
开始打印
1
4.2
str
开始打印

编译器会将可变参数填充为数组进行传参,从以上列子还可得出:可变参数传0个参数也是可行的。

但使用可变参数进行方法重载的时候,可能会产生歧义。

在这里插入图片描述
这是因为可变参数可以传递0个参数,会导致编译器无法知道调用哪个方法。不过,为2个方法增加1个非可变参数即可解决问题。

在这里插入图片描述

三、枚举类型

在编码过程中,通常会将一些特定类型的值定义为常量,例如:不同类型的学历层次。

    public static final String PRIMARY_SCHOOL = "primarySchool";

    public static final String JUNIOR_HIGH_SCHOOL = "juniorHighSchool ";

    public static final String SENIOR_HIGH_SCHOOL = "seniorHighSchool";

但有时我们需要为常量拓展一些特性,比如:绑定每个学历层级的教育年限。那么光使用常量就无法满足需求了,这时推荐使用枚举类型。

枚举类型是一个特殊的类,关键字不用 class 而是 enum 表示。



    PRIMARY_SCHOOL("primarySchool", 6), JUNIOR_HIGH_SCHOOL("juniorHighSchool", 3), SENIOR_HIGH_SCHOOL(
            "seniorHighSchool", 3);

    String name;

    int year;

    EducationEnum(String name, int year) {
        this.name = name;
        this.year = year;
    }

    public String getName() {
        return name;
    }

    public int getYear() {
        return year;
    }

    @Override
    public String toString() {
        return "学历:" + name + ";教育年限:" + year;
    }

枚举类可以自定义多个属性,但枚举包含的所有类型,必须初始化在枚举类中,每个枚举类型都可以当做为一个对象,还可以重写枚举的方法,定制符合需要的业务。

        String name = EducationEnum.PRIMARY_SCHOOL.getName();
        System.out.println("name==="+name);
        int year = EducationEnum.PRIMARY_SCHOOL.getYear();
        System.out.println("year==="+year);
        System.out.println(EducationEnum.PRIMARY_SCHOOL.toString());
name===primarySchool
year===6
学历:primarySchool;教育年限:6

此外,枚举自身也提供一些API供开发者调用,如:获取枚举类型位于第几顺位使用 ordinal() ;

        int ordinal = EducationEnum.PRIMARY_SCHOOL.ordinal();
        System.out.println("ordinal==="+ordinal);
ordinal===0

本次分享至此结束,希望本文对你有所帮助,若能点亮下方的点赞按钮,在下感激不尽,谢谢您的【精神支持】。

若有任何疑问,也欢迎与我交流,若存在不足之处,也欢迎各位指正!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BaymaxCS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值