理解数组:数组也是一种类型
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变量都引用了第一个数组。此时第二个数组失去了引用,变成了垃圾,只有等待垃圾回收机制来回收它。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。