Java 数组
一维数组
一维数组的声明
type var [] ; 或 type [] var ;
例如
int a1 [] ; int [] a2 ;
double b[];
Person [] p1 ; String s1[];
- 注意:Java语言中声明数组时不能指定其长度
int a[5]; //非法
数组对象的创建
- Java中使用new关键字来创建数组对象
int s[] ; //栈空间声明一个引用类型s用来指向数组对象
s = new int[5]; //堆空间中创建五个小格,并用s指向它们
- 可以看出Java中先创建数组的引用,再new出对象,默认初始化为0
- 内存图
- 另外附上对象数组的内存
- 先有对象数组的引用days,days指向堆空间中的三个小格,这时要注意这三个小格中装的不是对象,**而是对象的引用。*
数组的使用
- 数组名+下标访问
a[1] = 1 ;
person[1] = new Person(***);
- 数组名.length,获得数组的长度。但是要注意,length是数组的属性不是方法,所以不用加小括号。
for(int i = 1 ; i <= s.length ; i++)
- 主方法的参数中有String[] args,它是用来存放命令行参数的。都是字符串类型。
二维和多维数组
- 二维数组可以看成数组的数组。
二维数组的声明
int a[][] = new int [3][];
//二维数组的引用有两个中括号(几维数组就有几个中括号)
Java中多维数组的声明要从高维到低维进行,就是从左到右进行。因为Java中的多维数组是数组的数组。假设第一维分出三个小格,而这三个小格中装的是一维数组的引用。如果先分配低维的话,就会造成没有东西指向它。
二维数组的声明
- 静态初始化
//Java自动分配
int a[][] = { {1,2},{2,3},{3,4,5} };
//非法操作
int a[][] = { {1,2},{3,4},{4,5} };
- 动态初始化
//直接分配
int a[][] = new int[3][5];
//每个维度挨个分配
int b[][] = new int[3][];
b[0] = new int[2];
b[1] = new int[3];
b[2] = new int[5];
二维数组的使用
- 与一维数组相似
数组的拷贝
- 使用java.lang.System类的静态方法
public static void arraycopy(object src,int srcPos,object dest,int destPos,int length)
//参数分别代表源数组引用、源数组拷贝起始位置、目标数组引用、目标数组粘贴起始位置、要拷贝多长
- 如果是多维数组的拷贝,这个方法只拷贝第一维,有时会造成两个多维数组引用同时指向同一块内存。