索引
同單一資料型別的定義一樣,Java虛擬機器(JVM)還定義了索引(reference)這種資料類型。索引類型可以“引用”變數,由於Java沒有明確地定義指標類型,所以索引類型可以被認為就是指向實際值或者指向變數所代表的實際值的指標。一個對象可以被多於一個以上的索引所“指”。JVM從不直接對對象定址而是操作對象的索引。
索引類型分成三種,它們是:類(class)、介面(interface)和數組(array)。索引類型可以引用動態建立的類執行個體、普通執行個體和數組。索引還可以包含特殊的值,這就是null 索引。null 索引在運行時上並沒有對應的類型,但它可以被轉換為任何類型。索引類型的預設值就是null。
類
類(Class)指的是定義方法和資料的資料類型。從內部來看,JVM通常把class類型對象實現為指向方法和資料的一套指標。定義class類型的變數只能引用類的執行個體或者null ,如以下代碼所示:
MyObject anObject = new MyObject(); // 合法
MyObject anotherObject = null; // 合法
MyObject stillAnotherObject = 0; // 非法
介面
介面(interface)好比一種模版,這種模版定義了對象必須實現的方法,其目的就是讓這些方法可以作為介面執行個體被引用。介面不能被執行個體化。類可以實現多個介面並且通過這些實現的介面被索引。介面變數只能索引實現該介面的類的執行個體。比方說,假設我們定義了一個介面,名字是Comparable ,同時還定義了一個類SortItem,這個類實現了介面Comparable,那麼我們可以編寫以下的定義代碼:
Comparable c = new SortItem();
假如Comparable 介面定義了一個方法: public void compare(Comparable item), 那麼SortItem 類就必須提供compare 方法的實現,如以下代碼所示:
public class SortItem implements Comparable
{
public void compare(Comparable item)
{
...method implementation here
}}
數組
Java數組(array)是動態建立的索引對象,這一點和類非常相似,此外,同類一樣,數組只能索引數組的執行個體或者null ,如以下代碼所示:
int[] myIntArray = new int[5];
int[] anotherIntArray = null;
數組是Object類的繼承,這樣,Object類的所有方法都可以被數組調用。數組對象由元素組成。元素的數目也可以為0,在這種情況下稱做數組為空白。所有的數組都是從0開始對元素編號的,這意味著數組內的第1個元素的索引編號是數字0。所有對數組元素的訪問都會在運行時上接受檢查,如果試圖使用編號小於0或者大於數組長度來索引元素就會產生ArrayIndexOutOfBoundsException異常並被扔出。
數組的元素按整型值索引,如以下代碼所示:
int[] myIntArray = { 9, 5, 6 };
int int1 = myIntArray[0];
int int2 = myIntArray[1];
int int3 = myIntArray[2];