| 導購 | 订阅 | 在线投稿
分享
 
 
 

面向對象編程:Java複雜數據類型用法

來源:互聯網  2008-05-19 06:33:24  評論

在這篇文章中,我們將討論Java語言中的複雜數據類型。其內容涉及到初始化過程、默認初值和某些針對複雜數據類型的操作。

索引

同簡單數據類型的定義一樣,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];

數組對象的長度是不變的。爲了改變數組變量的長度,你必須創建另一個數組並賦給變量,如以下代碼所示:

int[]

myIntArray = { 9, 5, 6 };

System.out.println("myIntArray length = " +myIntArray.length);

// 輸出結果是3

myIntArray = new int[] { 3, 6, 4, 2, 8 };

System.out.println("myIntArray length = " +myIntArray.length);

// 輸出結果是5

複合數據類型

Java語言不支持結構(struct)或聯合(union)數據類型。它的複合數據類型是通過類或者接口來構造的,類提供了捆綁數據和方法的方式,同時可以限制對類的私有數據的訪問。比如說,如果用C語言,那麽汽車(car)就可以如下代碼所示用結構來定義:

struct Car

{

char*

model;

char*

make;

int

year;

Engine*

engine;

Body*

body;

Tire**

tires;

}

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

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

複合數據類型的初始化

複合數據類型由構造器內定義的代碼實現初始化,構造器在類的創建函數(比如「new」之類)應用到類變量的時候被調用。構造器被調用之前,類的各個成員被初始化爲各自的默認值或者顯式賦予的初值。清單B 中的程序代碼對以上過程進行了解釋。

在清單B的代碼中,當myClass 的實例用new 運算符創建時,構造器public MyClass()即被調用促使類對自身初始化。初始化的過程如下所示:

1. 聲明「int

myInt;」給myInt賦默認值0。

2. 聲明「AnotherClass

anotherClass;」給anotherClass分配默認值null。

3. 構造器內的聲明「myint = 2;」給myInt賦值爲2。

預定義複合數據類型

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

小結

除了簡單數據類型之外,Java語言中還定義了本文所討論三種索引數據類型。Java還運行開發人員自己用簡單和索引數據類型組合起來創建複合數據類型。用戶定義的組合數據類型和Java預定義複合數據類型一道爲程序員提供了強大的面向對象工具包。在接下來的文章裏,我們會進一步詳細地討論大多數常用的複雜數據類型及其可用操作。我們會首先從Java所特有的集合框架講起。

  在這篇文章中,我們將討論Java語言中的複雜數據類型。其內容涉及到初始化過程、默認初值和某些針對複雜數據類型的操作。   索引   同簡單數據類型的定義一樣,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];   數組對象的長度是不變的。爲了改變數組變量的長度,你必須創建另一個數組並賦給變量,如以下代碼所示:   int[]   myIntArray = { 9, 5, 6 };   System.out.println("myIntArray length = " +myIntArray.length);   // 輸出結果是3   myIntArray = new int[] { 3, 6, 4, 2, 8 };   System.out.println("myIntArray length = " +myIntArray.length);   // 輸出結果是5   複合數據類型   Java語言不支持結構(struct)或聯合(union)數據類型。它的複合數據類型是通過類或者接口來構造的,類提供了捆綁數據和方法的方式,同時可以限制對類的私有數據的訪問。比如說,如果用C語言,那麽汽車(car)就可以如下代碼所示用結構來定義:   struct Car   {   char*   model;   char*   make;   int   year;   Engine*   engine;   Body*   body;   Tire**   tires;   }   以上的示範代碼還隱含采用了先前定義的引擎(Engine)、車身(Body)和輪胎(Tire)結構。而采用Java語言,汽車的定義如清單A所示。   以上的示例還假設我們以前都已經定義過CarModels和CarMakes接口以及Engine、Body、Tire、DurangoEngine、DurangoBody和GoodyearTire類。   複合數據類型的初始化   複合數據類型由構造器內定義的代碼實現初始化,構造器在類的創建函數(比如「new」之類)應用到類變量的時候被調用。構造器被調用之前,類的各個成員被初始化爲各自的默認值或者顯式賦予的初值。清單B 中的程序代碼對以上過程進行了解釋。   在清單B的代碼中,當myClass 的實例用new 運算符創建時,構造器public MyClass()即被調用促使類對自身初始化。初始化的過程如下所示:   1. 聲明「int   myInt;」給myInt賦默認值0。   2. 聲明「AnotherClass   anotherClass;」給anotherClass分配默認值null。   3. 構造器內的聲明「myint = 2;」給myInt賦值爲2。   預定義複合數據類型   Java語言包含了大量的預定義複合數據類型。其中之一的String 類屬于java.lang 包。String 類提供的方法執行常用的字符串操作,比如length()、 substring(int beginIndex)、toUpperCase()、toLowerCase()、equals() 等等。另一種常用的Java複合數據類型是Vector 類,它屬于java.util 包。Vector 類定義的方法執行可擴展對象數組的常用操作。比如add(int index, Object element)、elementAt(int index)、isEmpty()和remove(int index)等。這些就是一小部分預定義複合數據類型的代表示例。在以後的文章裏我們還會進一步對預定義複合數據類型進行討論。   小結   除了簡單數據類型之外,Java語言中還定義了本文所討論三種索引數據類型。Java還運行開發人員自己用簡單和索引數據類型組合起來創建複合數據類型。用戶定義的組合數據類型和Java預定義複合數據類型一道爲程序員提供了強大的面向對象工具包。在接下來的文章裏,我們會進一步詳細地討論大多數常用的複雜數據類型及其可用操作。我們會首先從Java所特有的集合框架講起。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有