一.数组的定义
本来数组在C++中已经写了好多,但是一直没把数组当成个对象。在java中,数组也是个对象!所以还是用引用型变量,定义一个数组。与之前C风格的数组在定义的时候不大一样,所以还是记录一下。
一个例子:
public class ArrayTest {
public static void main(String[] args)
{
//定义一个长度为3的数组
int[] x = new int[3];
for (int i = 0; i < 3; i++)
System.out.println(x[i]);//输出为 0 0 0
for (int i = 0; i < 3; i++)
x[i] = i;
for (int i = 0; i < 3; i++)
System.out.println(x[i]);//输出为 0 1 2
}
}
要点:
1.定义一个数组的格式: 数组保存的数据类型[] 数组名 = new 数组保存的数据类型[数组的长度] eg:int[] array = new int[3];
2.堆内存中的数据有默认的值,int默认值为0,double为0.0 boolean为false。
3.左边是在栈内存中定义一个array的引用型变量,右边new出一个int型的对象。用array引用该对象。对于数组,即array保存数组在堆内存中的首地址。
4.数组的操作注意不要引发NullPointerException异常和ArrayIndexOutOfBoundsException异常
数组的一种简单定义及赋初值方式:
public class ArrayTest {
public static void main(String[] args)
{
//定义一个数组,并赋初值
int[] x = {1, 2, 3};
for (int i = 0; i < x.length; i++)
System.out.println(x[i]);//输出为 1 2 3
}
}
要点:
1.定义方式: 数据类型[] 数组名 = {数组内容, 数组内容.......};
2.数组的长度可以用 数组名.length获得。
二.引用类型数组(对象数组)
class ArrayDemo
{
public int value = 100;
}
public class ArrayTest {
public static void main(String[] args)
{
ArrayDemo[] array = new ArrayDemo[3];
System.out.println(array[0].value);
}
}
结果如图:
结果是空指针异常。原因是数组是引用数据类型,但是仅仅是创建了一个数组,并没有创建对象。
改正:
class ArrayDemo
{
public int value = 100;
}
public class ArrayTest {
public static void main(String[] args)
{
ArrayDemo[] array = new ArrayDemo[3];
//为数组的每个元素创建一个对象来引用
for (int i = 0; i < array.length; i++)
array[i] = new ArrayDemo();
for (int i = 0; i < array.length; i++)
System.out.println(array[0].value);
}
}
结果如下:
要点:
虽然数组是引用类型,但是数组元素如果也是引用类型,不是原始数据类型,仍需要创建对象后再使用,否则会出现空指针异常。
三.数组的遍历
用惯了C的for循环,发现java还有一个更为简单的遍历方式,foreach循环
public class ArrayTest2 {
public static void main(String[] args)
{
int[] array = {1, 2, 3, 4, 5};
//foreach遍历
for(int x : array)
System.out.println(x);
}
}
foreach字面理解就是每个都,事实也是如此,遍历数组中的每个元素。
要点:
1.foreach其实就是for循环的简化版,任何foreach循环都可以化成for循环,反过来不成立。
2.在for()中定义一个迭代变量,与数组元素相同。注意格式for(数据类型 数据名 :数组名) 调用数据名
四.数组作为参数传递
public class ArrayTest3 {
public static void main(String[] args)
{
int[] array = {1, 2, 3, 4};
printArray(array);
}
public static void printArray(int[] arr)
{
for(int x : arr)
System.out.println(x);
}
}
要点:
数组作为引用类型传参,传递数组名即可,传递之后,数组有可能会被修改。
五.多维数组
public class ArrayTest4 {
public static void main(String[] args)
{
//直接定义二维数组
int arr[][] = new int[2][3];
//分开定义二维数组
int arr2[][];
//定义行
arr2 = new int[2][];
//分别定义每一行,每一行的个数可以不一样
arr2[0] = new int[2];
arr2[1] = new int[4];
for(int i = 0; i < 2; i++)
for(int j = 0; j < 2; j++)
System.out.println(arr2[i][j]);
}
}
java中也可以定义多维数组,多维数组可以看做一维数组。
要点:
两种定义方式,第一种直接定义,与C差不多。 第二种是先定义行数,再分开定义每一行,这样可以让数组不“对称”,即每行元素个数可以不同。但是访问时需要注意下标不要越界。