在此之前已經在本書中介紹過數組了?,F在既然你已了解了類,可以介紹關于數組的重要的一點:數組是作為對象來實現的。因此,你可能想要利用數組的一種特別的屬性,具體地說,就是一個數組的大小——也就是,一個數組能保存的元素的數目——可以在它的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個元素??梢钥闯?,數組保持它們自己長度信息的事實使創建任何大小的堆棧很容易。
原文轉自:http://www.anti-gravitydesign.com