在此之前已经在本书中介绍过数组了。现在既然你已了解了类,可以介绍关于数组的重要的一点:数组是作为对象来实现的。因此,你可能想要利用数组的一种特别的属性,具体地说,就是一个数组的大小——也就是,一个数组能保存的元素的数目——可以在它的length 实例变量中找到。所有的数组都有这个变量,并且它总是保存数组的大小。下面的程序示例了这个性质:
// This program demonstrates the length array member.
class Length {
public static void main(String args[]) { int a1[] = new int[10];int a2[] = {3,5,7,1,8,99,44,-10};int a3[] = {4,3,2,1};
System.out.println("length of a1 is " + a1.length);
System.out.println("length of a2 is " + a2.length);
System.out.println("length of a3 is " + a3.length);
}
}
该程序显示如下输出:
length of a1 is 10
length of a2 is 8
length of a3 is 4
可以看出,每个数组的大小都被显示。要记住length 的值和数组实际使用的元素的个数没有关系。length 仅反映了数组能够包含的元素的数目。
在许多情况下,你可以好好利用length 。例如,下面的程序是Stack类的改进版本。你可能回忆起,该类的早期的版本总是要产生一个10个元素的堆栈。下面的版本可以让你产生任意长度的堆栈。stck.length 的值用来防止堆栈溢出。
// Improved Stack class that uses the length array member.
class Stack { private int stck[]; private int tos;
// allocate and initialize stack
Stack(int size) {
stck = new int[size];
tos = -1;
}
// Push an item onto the stack void push(int item) {if(tos==stck.length-1) // use length member System.out.println("Stack is full.");
else
stck[++tos] = item;
}
// Pop an item from the stack int pop() {
if(tos < 0) { System.out.println("Stack underflow."); return 0;
}
else
return stck[tos--];
}
}
class TestStack2 {
public static void main(String args[]) {
Stack mystack1 = new Stack(5);
Stack mystack2 = new Stack(8);
// push some numbers onto the stack
for(int i=0; i<5; i++) mystack1.push(i);
for(int i=0; i<8; i++) mystack2.push(i);
// pop those numbers off the stack
System.out.println("Stack in mystack1:");
for(int i=0; i<5; i++)
System.out.println(mystack1.pop());
System.out.println("Stack in mystack2:");
for(int i=0; i<8; i++)
System.out.println(mystack2.pop());
}
}
注意,该程序创建了两个堆栈:一个有5个元素,另一个有8个元素。可以看出,数组保持它们自己长度信息的事实使创建任何大小的堆栈很容易。