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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mapstruct解放Java物件轉換StructJava物件
- Java物件轉換成MapJava物件
- java 物件與xml相互轉換Java物件XML
- Java學習--xml文字轉換成Java物件JavaXML物件
- 轉向vscode的宣告VSCode
- java將物件轉為json的方式Java物件JSON
- Java將Boolean轉為Json物件的方法JavaBooleanJSON物件
- JSON 與 Java 物件之間的轉化JSONJava物件
- 命令式、宣告式、物件導向、函式式、控制反轉之華山論劍(上)物件函式
- Java中使用Fastjson將JSON檔案轉物件JavaASTJSON物件
- jxcel - 好用的Excel與Java物件轉換工具ExcelJava物件
- Java如何將Object轉換成指定Class物件JavaObject物件
- JS json字串轉物件、物件轉字串JSON字串物件
- java基本型別和物件之間的轉換Java型別物件
- Java:List集合&Integer物件&int[]陣列相互轉化Java物件陣列
- java 將物件集合轉為欄位值的 listJava物件
- 物件轉型物件
- java 陣列的定義(宣告)方法Java陣列
- java變數怎麼設定(宣告)Java變數
- jquery物件如何轉化成DOM物件jQuery物件
- Java物件為空時,不顯示該物件屬性,或者將null轉換為""Java物件Null
- 轉向Kotlin——物件Kotlin物件
- Java變數的宣告和初始化Java變數
- js jquery 列印物件;json 物件轉字串jQuery物件JSON字串
- 使用@ResponseBody物件轉json和@RequestBody進行json轉物件案例物件JSON
- Java Scanner物件Java物件
- Java物件導向——類與物件Java物件
- typeof-jsonc 將 JSONC/JSON 轉換為 TypeScript 宣告JSONTypeScript
- jquery物件和DOM物件的互相轉換jQuery物件
- jQuery 物件 與 原生 DOM 物件 相互轉換jQuery物件
- Java:Java的物件導向Java物件
- java中父類宣告子類例項化Java
- 物件賦值轉換物件賦值
- js物件轉json字串物件JSON字串
- XXL-EXCEL v1.1.1 釋出,Java物件和Excel轉換工具ExcelJava物件
- Java程式碼實現帶時區時間字串轉為LocalDateTime物件Java字串LDA物件
- 好程式設計師Java實用教程系列之物件的轉型程式設計師Java物件
- Java物件轉JSON時如何動態的增刪改查屬性Java物件JSON
- Java 物件和類Java物件