【正文】
中。這樣做是安全的,因?yàn)樗鼈冇肋h(yuǎn)都不會(huì)改變。執(zhí)行這 第 4頁(yè) 些代碼時(shí),會(huì)在堆里自動(dòng)進(jìn)行數(shù)據(jù)的保存。創(chuàng)建程序時(shí), Java 編譯器必須準(zhǔn)確地知道堆棧內(nèi)保存的所有數(shù)據(jù)的 “長(zhǎng)度 ”以及 “存在時(shí)間 ”。有六個(gè)地方都可以保存數(shù)據(jù): 寄存器。所以在上面的例子中,可以說(shuō): String s = new String(asdf)。這是由于 s 實(shí)際并未與任何東西連接(即 “沒有電視機(jī) ”)。只要握住這個(gè)遙控板,就相當(dāng)于掌握了與電視機(jī)連接的通道。 (1) 用句柄操縱對(duì)象 。 無(wú)論 C++還是 Java 都屬于雜合語(yǔ)言。也就是說(shuō),正式用它設(shè)計(jì)之前,必須先將自己的思想轉(zhuǎn)入一個(gè)面向?qū)ο蟮氖澜纾ǔ窃缫蚜?xí)慣了這個(gè)世界的思維方式)。但要注意,盡管將一切都“看作 ”對(duì)象,但操縱的標(biāo)識(shí)符實(shí)際是指向一個(gè)對(duì)象的 “句柄 ”( Handle)。所以如果想容納一個(gè)詞或句子,可創(chuàng)建一個(gè) String句柄: String s。 創(chuàng)建句柄時(shí),我們希望它同一個(gè)新對(duì)象連接。事實(shí)上,這應(yīng)是 Java 程序設(shè)計(jì)的一項(xiàng)基本操作,是繼續(xù)本書后余部分學(xué)習(xí)的基礎(chǔ)。駐留于常規(guī) RAM(隨機(jī)訪問(wèn)存儲(chǔ)器)區(qū)域,但可通過(guò)它的 “堆棧指針 ”獲得處理的直接支持。和堆棧不同, “內(nèi)存堆 ”或 “堆 ”( Heap)最吸引人的地方在于編譯器不 必知道要從堆里分配多少存儲(chǔ)空間,也不必知道存儲(chǔ)的數(shù)據(jù)要在堆里停留多長(zhǎng)的時(shí)間。但 Java 對(duì)象本身永遠(yuǎn)都不會(huì)置 入靜態(tài)存儲(chǔ)空間。對(duì)于流式對(duì)象,對(duì)象會(huì)變成字節(jié)流,通常會(huì)發(fā)給另一臺(tái)機(jī)器。盡管它們大致可以劃分為 “封裝器 ”類型,但兩者都沒有對(duì)應(yīng)的 “主類型 ”。 Big Decimal 支持任意精度的定點(diǎn)數(shù)字。一個(gè) Java 可以保證被初始化,而且不可在它的范圍之外訪問(wèn)。若試圖使用依然為 null 的一個(gè)句柄,就會(huì)在運(yùn)行期報(bào)告問(wèn)題。對(duì)于在作用域里定義的名字, 作 用域同時(shí)決定了它的 “可見性 ”以及 “存在時(shí)間 ”。 對(duì)象的作用域 Java 對(duì)象不具備與主類型一樣的存在時(shí)間。看來(lái)在 C++里遇到的麻煩最大:由于不能從語(yǔ)言獲得任何幫助,所以在需要對(duì)象的時(shí)候,根本無(wú)法確定它們是否可用。這意味著我們根本不必操心內(nèi)存的回收問(wèn)題。 you can use these for accurate moary calculations, for example. Consult the JDK documentation for details about the constructors and methods you can call for these two classes. Arrays in Java Virtually all programming languages support arrays. Using arrays in C and C++ is perilous because those arrays are only blocks of memory. If a program accesses the array outside of its memory block or uses the memory before initialization (mon programming errors), there will be unpredictable results. One of the primary goals of Java is safety, so many of the problems that plague programmers in C and C++ are not repeated in Java. A Java array is guaranteed to be initialized and cannot be accessed outside of its range. The range checking es at the price of having a small amount of memory overhead on each array as well as verifying the index at run time, but the assumption is that the safety and increased productivity is worth the expense. When you create an array of objects, you are really creating an array of references, and each of those references is automatically initialized to a special value with its own keyword: null. When Java sees null, it recognizes that the reference in question isn?t pointing to an object. You must assign an object to each reference before you use it, and if you try to use a reference that?s still null。這樣做可防止在 C++里很常見的一個(gè)編程問(wèn)題:由于程序員忘記釋放內(nèi)存造成的 “內(nèi)存溢出 ”。 這樣便帶來(lái)了一個(gè)有趣的問(wèn)題。 那么句柄 s 會(huì)在作用域的終點(diǎn)處消失。 作為在作用域里定義的一個(gè)變量,它只有在那個(gè)作用域結(jié)束之前才可使用。 也可以創(chuàng)建主類型數(shù)組。但由此換回的是更高的安全性,以及更高的工作效率。 至于調(diào)用這兩個(gè)類時(shí)可選用的構(gòu)建器和方法,請(qǐng)自行參考聯(lián)機(jī)幫助文檔。也就是說(shuō),能對(duì) int 或 float 做的事情,對(duì) Big Integer 和 Big Decimal 一樣可以做。即使程序中止運(yùn)行,它們?nèi)钥杀3肿约旱臓顟B(tài)不變。常數(shù)值通常直接置于程序代碼內(nèi)部。要求創(chuàng)建一個(gè)對(duì)象時(shí),只需用 new 命令編制相關(guān)的代碼即可。這是一種特別快、特別有效的數(shù)據(jù)保存方式,僅次于寄存器。特別要注意的是內(nèi)存的分配。 new的意思是: “把我變成這些對(duì)象的一種新類型 ”。若此時(shí)向 s 發(fā)送一條消息,就會(huì)獲得一個(gè)錯(cuò)誤(運(yùn)行期)??蓪⑦@一情形想象成用遙控板(句柄)操縱電視機(jī)(對(duì)象)。 下面, 我們將探討 Java 程序的基本組件,并體會(huì)為什么說(shuō) Java 乃至 Java 程序內(nèi)的一切都是對(duì)象。 第 1頁(yè) 單位代碼 學(xué) 號(hào) 分 類 號(hào) 密 級(jí) _________ 文獻(xiàn) 翻譯 一切都是對(duì)象 院( 系)名稱 專 業(yè) 名 稱 學(xué) 生 姓 名 指 導(dǎo) 教 師 第 2頁(yè) 英語(yǔ)譯文 一切都是對(duì)象 王瑞 “盡管以 C++為基礎(chǔ),但 Java 是一種更純粹的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言 ”。只有做好這個(gè)準(zhǔn)備工作,與其他 OOP 語(yǔ)言相比,才能體會(huì)到 Java 的易學(xué)易用。在其他 Java 參考書里,還可看到有的人將其稱作一個(gè) “引用 ”,甚至一個(gè) “指針 ”。 第 3頁(yè) 但這里創(chuàng)建的只是句柄,并不是對(duì)象。通常用 new 關(guān)鍵字達(dá)到這一目的。 程序運(yùn)行時(shí),我們最好對(duì)數(shù)據(jù)保存到什么地方做到心中有數(shù)。堆 棧指針若向下移,會(huì)創(chuàng)建新的內(nèi)存;若向上移,則會(huì)釋放那些內(nèi)存。因此,用堆保存數(shù)據(jù)時(shí)會(huì)