Java中,数组是一种引用数据类型,不属于基本数据类型,数组的父类是Object
数组实际是个容器,可以同时容纳多个元素
数组,即一组数据,是个数据集合
数组当中可以存储基本数据类型,也可以存储引用数据类型的数据
数组存储在堆当中

数组中如果存储的是Java对象的话,实际上存储的是引用(对象的内存地址)
数组一旦创建,Java中规定长度不可变
Java中,数组分为一维数组、二维数组、三维数组、多维数组……
Java中的数组对象都有length属性,用于获取数组中元素的个数
Java中的数组,要求数组中元素类型要统一,如int数组则只能存int类型的数据

数组这种数据结构的优缺点:
优点:
缺点:
定义:
//定义
int[] array1;
boolean[] array2;
Object[] array3;
初始化:
静态初始化一维数组:
int[] array = {100,200,300};
动态初始化一维数组:
int[] array = new int[5]; //5表示元素个数是5,元素值默认是0
String[] names = new String[6]; //6个元素,默认值null
//测试数组
int[] a = {1,2,3,4,5};
(1)查
通过数组名[下标]
System.out.println("元素个数:"+ a.length); //数组对象的length属性
System.out.println(a[0]); //首位元素
System.out.println(a[a.length-1]); //末尾元素
(2)改
数组名[下标] = values;
a[0] = 111;
a[a.length-1] = 9527;
(3)遍历
//正序遍历
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
//倒叙遍历
for(int i=a.length-1;i>=0;i--){
System.out.println(a[i]);
}
//下标越界
System.out.println(a[100]);
下标越界异常:ArrayIndexOutBoundException

关于静态和动态初始化数组,静态即创建数组时,已确定个元素的值,如
Object[] objects = {new Object(),new Object(),new Object(),new Object()};
动态初始化即后期再a[0]=xx;a[1]=xx;如:
int[] a = new int[4];
举例:
public static void printArray(String[] args){
for(int i=0;i<args.length;i++){
System.out.println(args[i]);
}
}
public static void main(String[] args) {
//等价于String[] a = new String[3];
//再printArray(a);
printArray(new String[3]);
//直接传递静态数组是错误写法
printArray({"1", "2", "3"});
//这样是允许的
printArray(new String[]{"1", "2", "3"});
//或者改成这样也行
String[] a = {"1", "2", "3"};
printArray(a);
}
部分截图:

到此,main方法中的传参也就明晰了,即一个String数组String[] args,数组名args
public static void mian (String[] args){
System.out.println("JVM传的String数组的长度是:" + args.length);
}
结果:

分析:
args做为一个引用,我们引用.length属性没有空指针异常,说明args不是null。即String[] args = {};
或者说String[] args = new String[0]; ,就是说数组对象创建了,但里面没有数据。
🍁那么String[] args数组何时会有值?
String[] args数组是留给用户的,用户可以再控制台上输入参数,这些参数会被转化为String[] args
关于这一点,举例如下: 细品!!


对于存引用数据类型的数组来说,实际上存的是Java对象的内存地址,数组中每个元素都是引用。


Java中,数组长度一旦确定则不可变,当数组满了的时候,就需要扩容:
//源代码
public static native void arraycopy(Object src, int srcPos,
Object dest, int destPos,
int length);
四个传参为:
拷贝源数组、源数组的起点下标、目标数组(大数组)、目标的起点下标、拷贝长度

