今天我们来了解三个方面的内容:数组初始化、可变参数列表、枚举类型。
一、数组初始化
数组是将相同类型的对象封装到一起的序列。
定义数组只需在类型后方加上 [ ] 即可, 拥有两种表示方式:
/**
* 第一种(符合大多数人的编程习惯,推荐使用此种)
*/
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
本次分享至此结束,希望本文对你有所帮助,若能点亮下方的点赞按钮,在下感激不尽,谢谢您的【精神支持】。
若有任何疑问,也欢迎与我交流,若存在不足之处,也欢迎各位指正!