明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

面向?qū)ο缶幊蹋篔ava復(fù)雜數(shù)據(jù)分類用法

[摘要]在這篇文章中,我們將討論Java語言中的復(fù)雜數(shù)據(jù)類型。其內(nèi)容涉及到初始化過程、默認(rèn)初值和某些針對復(fù)雜數(shù)據(jù)類型的操作。索引同簡單數(shù)據(jù)類型的定義一樣,Java虛擬機(jī)(JVM)還定義了索引(reference)這種數(shù)據(jù)類型。索引類型可以“引用”變量,由于Java沒有明確地定義指針類型,所以索引類型可以被...
在這篇文章中,我們將討論Java語言中的復(fù)雜數(shù)據(jù)類型。其內(nèi)容涉及到初始化過程、默認(rèn)初值和某些針對復(fù)雜數(shù)據(jù)類型的操作。

索引


同簡單數(shù)據(jù)類型的定義一樣,Java虛擬機(jī)(JVM)還定義了索引(reference)這種數(shù)據(jù)類型。索引類型可以“引用”變量,由于Java沒有明確地定義指針類型,所以索引類型可以被認(rèn)為就是指向?qū)嶋H值或者指向變量所代表的實(shí)際值的指針。一個對象可以被多于一個以上的索引所“指”。JVM從不直接對對象尋址而是操作對象的索引。

索引類型分成三種,它們是:類(class)、接口(interface)和數(shù)組(array)。索引類型可以引用動態(tài)創(chuàng)建的類實(shí)例、普通實(shí)例和數(shù)組。索引還可以包含特殊的值,這就是null 索引。null 索引在運(yùn)行時上并沒有對應(yīng)的類型,但它可以被轉(zhuǎn)換為任何類型。索引類型的默認(rèn)值就是null。




類(Class)指的是定義方法和數(shù)據(jù)的數(shù)據(jù)類型。從內(nèi)部來看,JVM通常把class類型對象實(shí)現(xiàn)為指向方法和數(shù)據(jù)的一套指針。定義class類型的變量只能引用類的實(shí)例或者null ,如以下代碼所示:
MyObject anObject = new MyObject(); // 合法
MyObjectanotherObject = null; // 合法
MyObjectstillAnotherObject = 0; // 非法


接口

接口(interface)好比一種模版,這種模版定義了對象必須實(shí)現(xiàn)的方法,其目的就是讓這些方法可以作為接口實(shí)例被引用。接口不能被實(shí)例化。類可以實(shí)現(xiàn)多個接口并且通過這些實(shí)現(xiàn)的接口被索引。接口變量只能索引實(shí)現(xiàn)該接口的類的實(shí)例。比方說,假設(shè)我們定義了一個接口,名字是Comparable ,同時還定義了一個類SortItem,這個類實(shí)現(xiàn)了接口Comparable,那么我們可以編寫以下的定義代碼:
Comparable c = new SortItem();

假如Comparable 接口定義了一個方法: public void compare(Comparable item), 那么SortItem 類就必須提供compare 方法的實(shí)現(xiàn),如以下代碼所示:
public class SortItem implements Comparable
{
public void compare(Comparable item)
{
...method implementation here
}
}


數(shù)組

Java數(shù)組(array)是動態(tài)創(chuàng)建的索引對象,這一點(diǎn)和類非常相似,此外,同類一樣,數(shù)組只能索引數(shù)組的實(shí)例或者null ,如以下代碼所示:
int[]myIntArray = new int[5];
int[]anotherIntArray = null;

數(shù)組是Object類的繼承,這樣,Object類的所有方法都可以被數(shù)組調(diào)用。數(shù)組對象由元素組成。元素的數(shù)目也可以為0,在這種情況下稱做數(shù)組為空。所有的數(shù)組都是從0開始對元素編號的,這意味著數(shù)組內(nèi)的第1個元素的索引編號是數(shù)字0。所有對數(shù)組元素的訪問都會在運(yùn)行時上接受檢查,如果試圖使用編號小于0或者大于數(shù)組長度來索引元素就會產(chǎn)生ArrayIndexOutOfBoundsException異常并被扔出。

數(shù)組的元素按整型值索引,如以下代碼所示:
int[] myIntArray = { 9, 5, 6 };
int int1 = myIntArray[0];
int int2 = myIntArray[1];
intint3 = myIntArray[2];

數(shù)組對象的長度是不變的。為了改變數(shù)組變量的長度,你必須創(chuàng)建另一個數(shù)組并賦給變量,如以下代碼所示:
int[] myIntArray = { 9, 5, 6 };
System.out.println("myIntArray length = " +myIntArray.length);// 輸出結(jié)果是3
myIntArray = new int[] { 3, 6, 4, 2, 8 };
System.out.println("myIntArray length = " +myIntArray.length);// 輸出結(jié)果是5


復(fù)合數(shù)據(jù)類型

Java語言不支持結(jié)構(gòu)(struct)或聯(lián)合(union)數(shù)據(jù)類型。它的復(fù)合數(shù)據(jù)類型是通過類或者接口來構(gòu)造的,類提供了捆綁數(shù)據(jù)和方法的方式,同時可以限制對類的私有數(shù)據(jù)的訪問。比如說,如果用C語言,那么汽車(car)就可以如下代碼所示用結(jié)構(gòu)來定義:
struct Car
{
char* model;
char* make;
int year;
Engine* engine;
Body*body;
Tire**tires;
}

以上的示范代碼還隱含采用了先前定義的引擎(Engine)、車身(Body)和輪胎(Tire)結(jié)構(gòu)。而采用Java語言,汽車的定義如清單A所示。

以上的示例還假設(shè)我們以前都已經(jīng)定義過CarModels和CarMakes接口以及Engine、Body、Tire、DurangoEngine、DurangoBody和GoodyearTire類。


復(fù)合數(shù)據(jù)類型的初始化

復(fù)合數(shù)據(jù)類型由構(gòu)造器內(nèi)定義的代碼實(shí)現(xiàn)初始化,構(gòu)造器在類的創(chuàng)建函數(shù)(比如“new”之類)應(yīng)用到類變量的時候被調(diào)用。構(gòu)造器被調(diào)用之前,類的各個成員被初始化為各自的默認(rèn)值或者顯式賦予的初值。清單B 中的程序代碼對以上過程進(jìn)行了解釋。

在清單B的代碼中,當(dāng)myClass 的實(shí)例用new 運(yùn)算符創(chuàng)建時,構(gòu)造器public MyClass()即被調(diào)用促使類對自身初始化。初始化的過程如下所示:

聲明“intmyInt;”給myInt賦默認(rèn)值0。
聲明“AnotherClassanotherClass;”給anotherClass分配默認(rèn)值null。
構(gòu)造器內(nèi)的聲明“myint = 2;”給myInt賦值為2。
預(yù)定義復(fù)合數(shù)據(jù)類型

Java語言包含了大量的預(yù)定義復(fù)合數(shù)據(jù)類型。其中之一的String 類屬于java.lang 包。String 類提供的方法執(zhí)行常用的字符串操作,比如length()、 substring(int beginIndex)、toUpperCase()、toLowerCase()、equals() 等等。另一種常用的Java復(fù)合數(shù)據(jù)類型是Vector 類,它屬于java.util 包。Vector 類定義的方法執(zhí)行可擴(kuò)展對象數(shù)組的常用操作。比如add(int index, Object element)、elementAt(int index)、isEmpty()和remove(int index)等。這些就是一小部分預(yù)定義復(fù)合數(shù)據(jù)類型的代表示例。在以后的文章里我們還會進(jìn)一步對預(yù)定義復(fù)合數(shù)據(jù)類型進(jìn)行討論。


小結(jié)

除了簡單數(shù)據(jù)類型之外,Java語言中還定義了本文所討論三種索引數(shù)據(jù)類型。Java還運(yùn)行開發(fā)人員自己用簡單和索引數(shù)據(jù)類型組合起來創(chuàng)建復(fù)合數(shù)據(jù)類型。用戶定義的組合數(shù)據(jù)類型和Java預(yù)定義復(fù)合數(shù)據(jù)類型一道為程序員提供了強(qiáng)大的面向?qū)ο蠊ぞ甙。在接下來的文章里,我們會進(jìn)一步詳細(xì)地討論大多數(shù)常用的復(fù)雜數(shù)據(jù)類型及其可用操作。我們會首先從Java所特有的集合框架講起。