1

理解数组:数组也是一种类型

Java的数组要求所有数组元素具有相同的数据类型.

一旦数组的初始化完成,数组在内存中所占的空间将被固定下来,因此数组的长度将不可改变.如:

public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] arr = new int[2];
        arr[0] = 0;
        arr[1] = 1;
        arr[2] = 2;
        for(int i = 0;i < arr.length;i++){
            System.out.println(arr[i]);
        }
    }

上述代码在运行的时候会报错---Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2

定义数组

Java语言支持两种语法格式来定义数组:
type[] arrayName;
type arrayName[];
对于这两种语法格式而言,通常推荐使用第一种格式。因为第一种格式不仅具有更好的语意,而且具有更好的可读性。
数组是一种引用类型的变量,因此使用它定义一个变量时,仅仅表示定义了一个引用变量(也就是定义了一个指针),这个引用变量还未指向任何有效的内存空间,所以还没有内存空间来存储数组元素,因此这个数组也不能使用,只有对数组进行初始化后才可以使用。

数组的初始化

所谓初始化,就是为数组的数组元素分配内存空间,并为每个数组元素赋初始值。
数组的初始化有如下两种方式。

  • 静态初始化: 初始化时由程序员显示指定每个数组元素的初始值,由系统决定数组长度。
  • 动态初始化: 初始化时程序员只指定数组长度,有系统为数组元素分配初始值。

使用数组

数组最常用的用法就是访问数组元素,包括对数组元素进行赋值和取出数组元素的值。Java语言的数组索引值为数组长度减1.如果访问数组元素时指定的索引值小于0,或者大于等于数组的长度,编译程序不会出现任何错误,但运行时出现异常: java.lang.ArrayIndexOutOfBoundsException.

foreach循环

String[] names = {"zuckjet", "zuckberg"};
for (String name: names) {
    System.out.println(name);
}

使用foreach循环迭代变量数组元素时,并不能改变数组元素的值,因此不要对foreach的循环变量进行赋值。

探究

数组是一种引用数据类型,数组引用变量只是一个引用,数组元素和数组变量在内存中是分开存放的。
与所有引用变量相同的是,引用变量是访问真实对象的根本方式。也就是说,如果希望在程序中访问数组对象本身,则只能通过这个引用变量访问它。实际的数组对象被存储在堆内存中。

如果内存中数组不再有任何引用变量指向自己,则这个数组将成为垃圾,该数组所占的内存将会被系统的垃圾回收机制回收。因此,为了让垃圾回收机制回收一个数组所占的内存空间,可以将该数组变量赋为null.

int[] a = {1, 3, 5};
int[] b = {2, 4, 6, 8};
b = a;
System.out.println(b.length) //3

a变量和b变量都引用了第一个数组。此时第二个数组失去了引用,变成了垃圾,只有等待垃圾回收机制来回收它。


Zuckjet
437 声望657 粉丝

学如逆水行舟,不进则退。