java 宣告物件(轉)
java 宣告物件(轉)[@more@]正如剛才講過的,當你建立一個類時,你建立了一種新的資料型別。你可以使用這種型別來宣告該種型別的物件。然而,要獲得一個類的物件需要兩步。第一步,你必須宣告該類型別的一個變數,這個變數沒有定義一個物件。實際上,它只是一個能夠引用物件的簡單變數。第二步,該宣告要建立一個物件的實際的物理複製,並把對於該物件的引用賦給該變數。這是透過使用new 運算子實現的。new運算子為物件動態分配(即在執行時分配)記憶體空間,並返回對它的一個引用。這個引用或多或少的是new分配給物件的記憶體地址。然後這個引用被儲存在該變數中。這樣,在Java 中,所有的類物件都必須動態分配。讓我們詳細看一下該過程。
在前面的例子中,用下面的語句來宣告一個Box型別的物件:
Box mybox = new Box();
本例將上面講到的兩步組合到了一起,可以將該語句改寫為下面的形式,以便將每一步講的更清楚:
Box mybox; // declare reference to object
mybox = new Box(); // allocate a Box object
第一行宣告瞭mybox ,把它作為對於Box型別的物件的引用。當本句執行後,mybox 包含的值為null ,表示它沒有引用物件。這時任何引用mybox 的嘗試都將導致一個編譯錯誤。第二行建立了一個實際的物件,並把對於它的引用賦給mybox 。現在,你可以把mybox 作為Box的物件來使用。但實際上,mybox 僅僅儲存實際的Box 物件的記憶體地址。這兩行語句的效果如圖6-1 所示。
圖6-1 宣告Box 型別的物件
注意:那些熟悉C/C++ 語言的讀者,可能已經注意到了物件的引用看起來和指標類似。這種懷疑實質上是正確的。一個物件引用和記憶體指標類似。主要的差別(也就是Java安全的關鍵)是你不能像實際的指標那樣來操作它。這樣,對於物件引用,你就不能像指標那樣任意分配記憶體地址,或像整數一樣操作它。
6.2.1 深入研究new 運算子
剛才已經解釋過,new運算子動態地為一個物件分配地址。它的通用格式如下:
class-var = new classname( );
其中,class-var 是所建立類型別的變數。classname 是被例項化的類的名字。類的後面跟的圓括號指定了類的建構函式。建構函式定義當建立一個類的物件時將發生什麼。建構函式是所有類的重要組成部分,並有許多重要的屬性。大多數類在他們自己的內部顯式地定義建構函式。如果一個類沒有顯式的定義它自己的建構函式,那麼Java 將自動地提供一個預設的建構函式。對類Box 的定義就是這種情況。現在,我們將使用預設的建構函式。不久,你將看到如何定義自己的建構函式。
這時,你可能想知道為什麼對整數或字元這樣的簡單變數不使用new 運算子。答案是Java 的簡單型別不是作為物件實現的。出於效率的考慮,它們是作為“常規”變數實現的。你將看到,物件有許多特性和屬性,使Java 對物件的處理不同於簡單型別。由於對處理物件和處理簡單型別的開銷不同,Java 能更高效地實現簡單型別。後面,你將看見,對於那些需要完全物件型別的情況下,簡單型別的物件版本也是可用的。
理解new運算子是在執行期間為物件分配記憶體的是很重要的。這樣做的好處是你的程式在執行期間可以建立它所需要的記憶體。但是,記憶體是有限的,因此new有可能由於記憶體不足而無法給一個物件分配記憶體。如果出現這種情況,就會發生執行時異常(你將在第10 章學習如何處理這種異常以及其他異常情況)。對於本書中的示例程式,你不必擔心記憶體不足的情況,但是在實際的程式設計中你必須考慮這種可能性。
讓我們再次複習類和物件之間的區別。類建立一種新的資料型別,該種型別能被用來建立物件。也就是,類建立了一個邏輯的框架,該框架定義了它的成員之間的關係。當你宣告類的物件時,你正在創造該類的例項。因此,類是一個邏輯構造,物件有物理的真實性(也就是物件佔用記憶體空間)。弄清楚這個區別是很重要的。
在前面的例子中,用下面的語句來宣告一個Box型別的物件:
Box mybox = new Box();
本例將上面講到的兩步組合到了一起,可以將該語句改寫為下面的形式,以便將每一步講的更清楚:
Box mybox; // declare reference to object
mybox = new Box(); // allocate a Box object
第一行宣告瞭mybox ,把它作為對於Box型別的物件的引用。當本句執行後,mybox 包含的值為null ,表示它沒有引用物件。這時任何引用mybox 的嘗試都將導致一個編譯錯誤。第二行建立了一個實際的物件,並把對於它的引用賦給mybox 。現在,你可以把mybox 作為Box的物件來使用。但實際上,mybox 僅僅儲存實際的Box 物件的記憶體地址。這兩行語句的效果如圖6-1 所示。
圖6-1 宣告Box 型別的物件
注意:那些熟悉C/C++ 語言的讀者,可能已經注意到了物件的引用看起來和指標類似。這種懷疑實質上是正確的。一個物件引用和記憶體指標類似。主要的差別(也就是Java安全的關鍵)是你不能像實際的指標那樣來操作它。這樣,對於物件引用,你就不能像指標那樣任意分配記憶體地址,或像整數一樣操作它。
6.2.1 深入研究new 運算子
剛才已經解釋過,new運算子動態地為一個物件分配地址。它的通用格式如下:
class-var = new classname( );
其中,class-var 是所建立類型別的變數。classname 是被例項化的類的名字。類的後面跟的圓括號指定了類的建構函式。建構函式定義當建立一個類的物件時將發生什麼。建構函式是所有類的重要組成部分,並有許多重要的屬性。大多數類在他們自己的內部顯式地定義建構函式。如果一個類沒有顯式的定義它自己的建構函式,那麼Java 將自動地提供一個預設的建構函式。對類Box 的定義就是這種情況。現在,我們將使用預設的建構函式。不久,你將看到如何定義自己的建構函式。
這時,你可能想知道為什麼對整數或字元這樣的簡單變數不使用new 運算子。答案是Java 的簡單型別不是作為物件實現的。出於效率的考慮,它們是作為“常規”變數實現的。你將看到,物件有許多特性和屬性,使Java 對物件的處理不同於簡單型別。由於對處理物件和處理簡單型別的開銷不同,Java 能更高效地實現簡單型別。後面,你將看見,對於那些需要完全物件型別的情況下,簡單型別的物件版本也是可用的。
理解new運算子是在執行期間為物件分配記憶體的是很重要的。這樣做的好處是你的程式在執行期間可以建立它所需要的記憶體。但是,記憶體是有限的,因此new有可能由於記憶體不足而無法給一個物件分配記憶體。如果出現這種情況,就會發生執行時異常(你將在第10 章學習如何處理這種異常以及其他異常情況)。對於本書中的示例程式,你不必擔心記憶體不足的情況,但是在實際的程式設計中你必須考慮這種可能性。
讓我們再次複習類和物件之間的區別。類建立一種新的資料型別,該種型別能被用來建立物件。也就是,類建立了一個邏輯的框架,該框架定義了它的成員之間的關係。當你宣告類的物件時,你正在創造該類的例項。因此,類是一個邏輯構造,物件有物理的真實性(也就是物件佔用記憶體空間)。弄清楚這個區別是很重要的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-958067/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java之物件轉型Java物件
- 波哥學JAVA,定義類 宣告屬性 建立物件 例項化物件 物件呼叫屬性或者方法Java物件
- Java物件轉換成MapJava物件
- java之物件轉型2Java物件
- mapstruct解放Java物件轉換StructJava物件
- java 物件與xml相互轉換Java物件XML
- java物件與json物件間的相互轉換Java物件JSON
- Java學習--xml文字轉換成Java物件JavaXML物件
- 怎樣手工宣告API (轉)API
- java物件導向程式設計(轉)Java物件程式設計
- Xamarin XAML語言教程物件元素的宣告方式物件
- 命令式、宣告式、物件導向、函式式、控制反轉之華山論劍(上)物件函式
- 命令式、宣告式、函式式、物件導向、控制反轉之華山論劍(下)函式物件
- java將物件轉為json的方式Java物件JSON
- java json字串轉換為物件,轉換為listJavaJSON字串物件
- java變數怎麼設定(宣告)Java變數
- java 陣列的定義(宣告)方法Java陣列
- jxcel - 好用的Excel與Java物件轉換工具ExcelJava物件
- JSON 與 Java 物件之間的轉化JSONJava物件
- Java教室: Garbage Collection 清除物件的順序 (轉)Java物件
- Java變數的宣告和初始化Java變數
- Java:List集合&Integer物件&int[]陣列相互轉化Java物件陣列
- java基本型別和物件之間的轉換Java型別物件
- 深入理解Java物件例項生成的例子!(轉)Java物件
- JAVA基礎:使用Java開始物件導向的程式設計(轉)Java物件程式設計
- JS json字串轉物件、物件轉字串JSON字串物件
- java中父類宣告子類例項化Java
- Java中可以宣告一個類為Static嗎?Java
- Java Scanner物件Java物件
- Java中使用Fastjson將JSON檔案轉物件JavaASTJSON物件
- 輕鬆架起Java連線COM物件的橋樑 (轉)Java物件
- 使用Java開始物件導向的程式設計(轉)Java物件程式設計
- 解析Java類和物件的初始化過程(轉)Java物件
- Java物件導向——類與物件Java物件
- Java物件及物件引用變數Java物件變數
- VB中API的宣告特殊問題 (轉)API
- Java物件為空時,不顯示該物件屬性,或者將null轉換為""Java物件Null
- Java:Java的物件導向Java物件