物件導向程式設計:Java複雜資料型別用法(轉)
物件導向程式設計:Java複雜資料型別用法(轉)[@more@]在這篇文章中,我們將討論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); // 輸出結果是3myIntArray = 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()即被呼叫促使類對自身初始化。初始化的過程如下所示:
宣告“int myInt;”給myInt賦預設值0。
宣告“AnotherClass anotherClass;”給anotherClass分配預設值null。
構造器內的宣告“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虛擬機器(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); // 輸出結果是3myIntArray = 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()即被呼叫促使類對自身初始化。初始化的過程如下所示:
宣告“int myInt;”給myInt賦預設值0。
宣告“AnotherClass anotherClass;”給anotherClass分配預設值null。
構造器內的宣告“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所特有的集合框架講起。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-962339/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java複雜資料型別用法 (轉)Java資料型別
- java物件導向程式設計(轉)Java物件程式設計
- JavaScript物件導向程式設計——Array型別JavaScript物件程式設計型別
- C++程式設計雜談:物件導向 (轉)C++程式設計物件
- java-物件導向程式設計--多型Java物件程式設計多型
- hive複雜資料型別的用法Hive資料型別
- 全網最適合入門的物件導向程式設計教程:42 Python常用複合資料型別-collections容器資料型別物件程式設計Python資料型別
- [.net 物件導向程式設計基礎] (4) 基礎中的基礎——資料型別轉換物件程式設計資料型別
- 使用Java開始物件導向的程式設計(轉)Java物件程式設計
- 物件導向程式設計和`GP`泛型程式設計物件程式設計泛型
- 好程式設計師Java教程分享Java物件導向與程式導向程式設計師Java物件
- java-物件導向程式設計--(3)Java物件程式設計
- [譯] 值型別導向程式設計型別程式設計
- 物件導向的JavaScript程式設計 (轉)物件JavaScript程式設計
- 理解C++物件導向程式設計[多型性部分] (轉)C++物件程式設計多型
- [.net 物件導向程式設計基礎] (3) 基礎中的基礎——資料型別物件程式設計資料型別
- 物件導向程式設計物件程式設計
- 全網最適合入門的物件導向程式設計教程:39 Python常用複合資料型別-集合物件程式設計Python資料型別
- JAVA基礎:使用Java開始物件導向的程式設計(轉)Java物件程式設計
- [.net 物件導向程式設計基礎] (13) 物件導向三大特性——多型物件程式設計多型
- JAVA_15 物件導向程式設計(下)Java物件程式設計
- java-物件導向程式設計--繼承Java物件程式設計繼承
- Java SE 學習---物件導向程式設計Java物件程式設計
- 物件導向-設計模式-建立型物件設計模式
- Java--物件導向設計Java物件
- 用java進行物件導向程式設計,物件導向是什麼意思Java物件程式設計
- iOS 開發之 OOA (物件導向分析) & OOD (物件導向設計)& OOP (物件導向程式設計)iOS物件OOP程式設計
- [.net 物件導向程式設計基礎] (2) 關於物件導向程式設計物件程式設計
- JAVA物件導向之多型Java物件多型
- Java物件導向--多型Java物件多型
- 物件導向的關聯式資料庫設計(轉)物件資料庫
- 十三、物件導向程式設計物件程式設計
- js物件導向程式設計JS物件程式設計
- 程式設計思想 物件導向程式設計物件
- 十六、物件導向程式設計物件程式設計
- perl 物件導向程式設計物件程式設計
- LotusScript物件導向程式設計物件程式設計
- Javascript 物件導向程式設計JavaScript物件程式設計