·引用数据类型,数组中的元素可以是任何类型的数据
·Java中的数组名仍为数组的首地址
·数组长度确认之后就无法改变
两种初始化方式
·静态初始化
public class arraytext
{
public static void main(string[] args)
{
int[] ids;//表明ids是数组,此时是声明
ids = new int[] {1, 2, 3, 4};//这一步为初始化和赋值
}
};
//此处初始化方式为静态初始化,数组的初始化和元素的赋值同时进行
//与动态初始化的区别就在于初始化和赋值的顺序
·动态初始化
public class arraytext
{
public static void main(string[] args)
{
String names = new String[5];
}
};
//此处只有声明,将赋值操作和初始化分隔开
//此时要确定数组的的长度
二者比较和使用时的注意事项
public class arraytext
{
public static void main(string[] args)
{
string names = new String[5];
//动态初始化
int[] ids;
ids = new int [] {1, 2, 3, 4};
//静态初始化
int[]arr1 = { 1,2,3,4 };
int[]arr2 = new int[5];
arr2 = { 1,2,3,4,5 };
}
};
//此处的[]
//int[] ids,此处的[]相当于是强调ids是一个int类型的数组,是不可以加入任何数字的
//String[5],此处的[5]是用来规定数组长度,但是如果在此处的[]中有数字的话,就不
//能够再进行赋值了,[]中没有数值才能够进行赋值
//int []{1,2,3,4}此处是没确定长度的数组元素去通过赋值确定长度。
//此处的赋值操作
//arr1的赋值操作,相当于是静态初始化省略掉new int[]
//但是对于动态初始化的arr2而言,这样声明是错误的,new int是不能够省略的
数组长度的获取
public class arraytext
{
public static void main(string[] args)
{
int[] ids;
ids = new int [] {1, 2, 3, 4};
System.out.println(ids.length);
}
};
//System.out.println()是系统输出函数
//如果只是单纯获取长度,只需要使用“数组名.length”
数组的遍历
public class arraytext
{
public static void main(string[] args)
{
int[] ids;
ids = new int [] {1, 2, 3, 4};
for (int i = 0; i < ids.length; i++)
{
System.out.println(ids[i]);
}
}
};
//在Java中依旧可以使用“数组名称[下标]”来调用指定位置的元素
数组的默认初始化值
数据类型 | 默认初始化值 |
整型(byte、short、int、long) | 0 |
浮点型(float、double) | 0.0 |
字符型(char) | ascII码等于0的符号 |
布尔型(boolean) | Flase |
数组元素为引用数据类型 | null |
数组的内存解析
二维数组声明
可以将一维数组arr1又作为另一个数组arr2的元素存在
从数组的底层运行机制来看,其实并没有多维数组
public class arraytext
{
public static void main(string[] args)
{
int[][]arr1 = new int[][]{ {1,2,3},{4,5},{6,7,8} };
//静态初始化
String[][]arr2 = new String[3][2];
String[][]arr2 = new String[3][];
//动态初始化
}
};
//动态初始化的第二种虽然可以成功在堆空间为数组申请出空间,但是直接调用依旧会报错
//会要求完善数组才能够调用和赋值
//arr2[1]=new String[4]
//完善过程如上
二维数组的长度
只要是数组类型的数据,就有length的选项
从二位数组的定义去理解,上图所举出的例子而言,arr2.length的结果应该是3,但如果是arr2[1].length的结果就是2
二维数组的打印
public class arraytext
{
public static void main(string[] args)
{
int[][]arr1 = new int[][]{ {1,2,3},{4,5},{6,7,8} };
System.out.println(arr1[0]);
//此时打印的应该是对应arr1[0]的地址
System.out.println(arr1[0][1]);
//此时打印出的结果应该是具体默认值或者是存入的数字
}
};
二维数组的存储
数组的内容大致结束了,需要注意的点就是Java二维数组的运算机制,在对二维数组进行定义的时候,第一个[]必须要有数字,先完善外层数组,内层数组可以再次逐个定义,Java二维数组的运算机制与c语言的二维数组存储和运算机制有区别,所以在二维数组的存储和调用之间有不尽相同的点。同时还需要注意数组的静态初始化和动态初始化,动态初始化不可以使用{}对数组中的元素进行赋值,而静态初始化可以。静态初始化和动态初始化的最大区别就是赋值和声明的过程,静态初始化声明与赋值在一起,但是动态初始化是先声明再进行赋值。同时还要注意数组名本身代表的是地址,在这个地方要尤为注意对值传递和址传递的区别。在堆空间中,如果在栈空间中没有存储该地址的变量的话,会自动将这一块申请出来的空间销毁,址传递可能会造成一个空间的消失,所以使用址传递和值传递的时候要尤为注意。与C语言数组不同的是,Java数组存在默认值,且非引用数据类型的初始默认值为null,对于C语言数组不存在初始默认值,里面是一个随机的数字。