1 一维数组
1.1 数组的定义
在Java中,可以用如下格式定义一个数组:数据类型 [] 数组名 = new 数组类型 [数组长度] eg:int [] arr=new int [100]
:就相当于在内存中定义了100个int类型的变量,第一个变量的名称为arr[0]…………第100个变量的名称为arr[99],每个变量的默认值均为0;
1.2 数组初始化
1.2.1 数组动态初始化
数组动态初始化(声明并开辟数组)数据类型 [] 数组名称 = new 数组类型 [长度] ; eg:int [] data=new int [5] //声明并开辟一个长度为5的整形数组
- 数组的访问通过索引完成。即“数组名称[索引]”,数组索引是从0开始,因此索引的范围就是0~索引-1;如果超出索引访问,就会产生
java.long.ArrayIndexOutOfBoundsException
(数组下标越界异常)(运行时异常)。 - 当数组采用动态初始化开辟后,数组之中的每个元素都是该数据类型的默认值。
数组名.length
取得数组长度。- 数组属于引用数据类型,因此在使用之前一定要开辟空间,否则就会产生
java.long.NullPointerException
(空指针异常)(运行时异常)
范例:定义一个整形数组
public class Test{
public static void main(String[] args)
{
int [] x=null;
System.out.println(x.length);
x[0]=1;
x[1]=2;
x[2]=3;
for(int i=0;i<=x.length;i++)
{
System.out.print(x[i]+" ");
}
}
}
- 数组遍历推荐使用for-each循环
public class Test{
public static void main(String[] args)
{
int [] x=new int [3];
System.out.println(x.length);
x[0]=1;
x[1]=2;
x[2]=3;
for(int i:x)
{
System.out.print(i+" ");
}
}
}
1.2.2 数组静态初始化
在之前的数组定义中,有一个明显的特点:数组首先开辟空间,而后再使用索引进行内容的设置,这种定义数组的方式成为动态初始化。而数组在定义的同时设置内容,叫做静态初始化。语法一共分为以下两种:(推荐使用第二种完整格式)
1.简化格式:数据类型 [] 数组名称 ={值,值,……}
2.完整格式:数据类型 [] 数组名称 =new 数据类型 []{值,值,……}
在数组定义时直接设置内容,根据值的个数确定数组长度且长度不可修改
范例:
public class Test{
public static void main(String[] args)
{
int [] x=new int []{1,2,4,5,6,3,55};
System.out.println(x.length);
for(int i:x)
{
System.out.print(i+" ");
}
}
}
范例:观察匿名数组
public class Test{
public static void main(String[] args)
{
System.out.println(new int[]{1,3,5,7,9}.length);
}
}
1.3 数组空间的开辟
代码:
public class Test{
public static void main(String[] args)
{
int [] x=new int [3];
System.out.println(x.length);
x[0]=10;
x[1]=20;
x[2]=30;
for(int i=0:x)
{
System.out.print(i+" ");
}
}
}
1.3.1数组引用传递
数组作为引用数据类型,也一定能发生引用传递。
引用传递空间:同一块堆内存空间可以被不同的栈内存所指向
范例:
public class Test{
public static void main(String[] args)
{
int [] x=new int [3];
int [] tmp=null;
System.out.println(x.length);
x[0]=10;
x[1]=20;
x[2]=30;
tmp=x;
tmp[0]=90;
for(int i:x)
{
System.out.print(i+" ");
}
}
}