jdk16全面学习之jls的第十章Arrays
这一章是关于数组的部分介绍,相对简单一些.主要是数组的类型判断,至于多维数组和数组的初始化,由于比较简单,这里不再详述.
1 数组的元素类型同样遵循上溯规则
调试如下简单的代码
package com.company;
// 定义了point类
class Point { int x, y; }
//定义了point的子类
class ColoredPoint extends Point { int color; }
public class Main0 {
public static void main(String[] args) {
//子类数组
ColoredPoint[] cpa = new ColoredPoint[10];
//子类数组变量上溯为父类数组
Point[] pa = cpa;
System.out.println(pa[1] == null);
try {
//添加父类元素,报错
pa[0] = new Point();
} catch (ArrayStoreException e) {
System.out.println(e);
}
}
}
运行后报错显示为:
可见,直接把父类型的对象赋予到子类型的数组中,也是不行的.
2 数组的类型是运行时接口表示
调试代码如下:
package com.company;
public class Main1 {
public static void main(String[] args) {
//创建整数数组
int[] ia = new int[3];
//打印数组类型
System.out.println(ia.getClass());
//打印数组父类型
System.out.println(ia.getClass().getSuperclass());
//循环打印数组类型的接口
for (Class<?> c : ia.getClass().getInterfaces())
System.out.println("Superinterface: " + c);
}
}
运行后的结果为:
这里直接显示的数组类型为[I,这是运行时的类型表示,说明数组类型没有具体的类类型,只有接口形式的表示.
3 小结
Java中的数组比较简单,没有具体的类型,遵循上溯和下溯规则.