【正文】
須先將自己的思想轉(zhuǎn)入一個(gè)面 向?qū)ο蟮氖澜纾ǔ窃缫蚜?xí)慣了這個(gè)世界的思維方式)。由于 C++是 C 的一個(gè)超集,所以包含的許多特性都是后者不具備的,這些特性使 C++在某些地方顯得過(guò)于復(fù)雜。但在 Java 中,設(shè)計(jì)者覺(jué)得這種雜合并不象在 C++里那么重要。 (用外文寫 ) 附件 1:外文資料 翻譯譯文 一切都是對(duì)象 “盡管以 C++為基礎(chǔ),但 Java 是一種更純粹的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言”。 畢業(yè)設(shè)計(jì) (論文 )外文資料翻譯 系: 計(jì)算機(jī)系 專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù) 姓 名: 學(xué) 號(hào): 080601542 外文出處: jw092021/ 附 件: ; 。 指導(dǎo)教師評(píng)語(yǔ): 簽名: 年 月 日 注: 請(qǐng)將該封面與附件裝訂成冊(cè)。 無(wú)論 C++還是 Java 都屬于雜合語(yǔ)言。雜合語(yǔ)言允許采用多種編程風(fēng)格;之所以說(shuō) C++是一種雜合語(yǔ)言,是因?yàn)樗С峙c C 語(yǔ)言的向后兼容能力。 Java 語(yǔ)言首先便假定了我們只希望進(jìn)行面向?qū)ο蟮某绦蛟O(shè)計(jì)。只有做好這個(gè)準(zhǔn)備工作,與其他 OOP 語(yǔ)言相比,才能體會(huì)到Java 的易學(xué)易用。 1. 用句柄操縱對(duì)象 每種編程語(yǔ)言都有自己的數(shù)據(jù)處理方式。您曾利用一些特殊語(yǔ)法直接操作過(guò)對(duì)象,或處理過(guò)一些間接表示的對(duì)象嗎( C或 C++里的指針)? 所有這些在 Java 里都得到了簡(jiǎn)化,任何東西都可看作對(duì)象。但要注意,盡管將一切都“看作”對(duì)象,但操縱的標(biāo)識(shí)符實(shí)際是指向一個(gè)對(duì)象的“句柄”( Handle)??蓪⑦@一情形想象成用遙控板(句柄)操縱電視機(jī)(對(duì)象)。但一旦需要“換頻道”或者“關(guān)小聲音”,我們實(shí)際操縱的是遙控板(句柄),再由遙控板自己操縱電視機(jī)(對(duì)象)。 此外,即使沒(méi)有電 視機(jī),遙控板亦可獨(dú)立存在。所以如果想容納一個(gè)詞或句子,可創(chuàng)建一個(gè) String 句柄: String s。若此時(shí)向 s發(fā) 送一條消息,就會(huì)獲得一個(gè)錯(cuò)誤(運(yùn)行期)。因此,一種更安全的做法是:創(chuàng)建一個(gè)句柄時(shí),記住無(wú)論如何都進(jìn)行初始化: String s = asdf。通常,必須為對(duì)象使用一種更通用的初始化類型。通常用 new 關(guān)鍵字達(dá)到這一目的。所以在上面的例子中,可以說(shuō):String s = new String(asdf)。當(dāng)然,字串( String)并非唯一的類型。對(duì)我們來(lái)講,最重要的就是記住能自行創(chuàng)建類型。 3. 保存到什么地方 程序運(yùn)行時(shí),我們最好對(duì)數(shù)據(jù)保存到什么地方做到心中有數(shù)。有六個(gè)地方都可以保存數(shù)據(jù): (1) 寄存器。然而,寄存器的數(shù)量十分有限,所以寄存器是根據(jù)需要由編譯器分配。 (2) 堆棧。堆棧指針若向下移,會(huì)創(chuàng)建新的內(nèi)存;若 向上移,則會(huì)釋放那些內(nèi)存。創(chuàng)建程序時(shí), Java 編譯器必須準(zhǔn)確地知道堆棧內(nèi)保存的所有數(shù)據(jù)的“長(zhǎng)度”以及“存在時(shí)間”。這一限制無(wú)疑影響了程序的靈活性,所以盡管有些 Java 數(shù)據(jù)要保存在堆棧里 —— 特別是對(duì)象句柄,但 Java 對(duì)象并不放到其中。一種常規(guī)用途的內(nèi)存池(也在 RAM 區(qū)域),其中保存了 Java 對(duì)象。執(zhí)行這些代碼時(shí),會(huì)在堆里自動(dòng)進(jìn)行數(shù)據(jù)的保存。這兒的“靜態(tài)”( Static)是指“位于固定位置”(盡管也在RAM 里)??捎?static 關(guān)鍵字指出一個(gè)對(duì)象的特定元素是靜態(tài)的。1703java 對(duì)象英文文獻(xiàn)及翻譯 (5) 常數(shù)存儲(chǔ)。這樣做是安全 的,因?yàn)樗鼈冇肋h(yuǎn)都不會(huì)改變。 (6) 非 RAM 存儲(chǔ)。其中兩個(gè)最主要的例子便是“流式對(duì)象”和“固定對(duì)象”。而對(duì)于固定對(duì)象,對(duì)象保存在磁盤中。對(duì)于這些類型的數(shù)據(jù)存儲(chǔ),一個(gè)特別有用的技巧就是它們能存在于其他媒體中。 Java Lightweight persistence 的支持。 4. 特殊情況:主要類型 有一系列類需特別對(duì)待;可將它們想象成“基本”、“主要”或者“主”( Primitive)類型,進(jìn)行程序設(shè)計(jì)時(shí)要頻繁用到它們。對(duì)于這些類型, Java 采納了與 C 和 C++相同的方法。飧霰淞咳菽閃司嚀宓鬧 擔(dān) ?BRJava 決定了每種主要類型的大小。這種大小的不可更改正是 Java程序具有很強(qiáng)移植能力的原因之一。 主數(shù)據(jù)類型也擁有自己的“封裝器”( wrapper)類。例如: char c = 39。 Character C = new Character(39。)。x39。 5. 高精度數(shù)字 Java 增加了兩個(gè)類,用于進(jìn)行高精度的計(jì)算: BigInteger 和 BigDecimal。 這兩個(gè)類都有自己特殊的“方法”,對(duì)應(yīng)于我們針對(duì)主類型執(zhí)行的操作。只是必須使用方法調(diào)用,不能使用運(yùn)算符。我們犧牲了速 度,但換來(lái)了精度。也就是說(shuō),我們可精確表示任意大小的整數(shù)值,同時(shí)在運(yùn)算過(guò)程中不會(huì)丟失任何信息。例如,可用它進(jìn)行精確的幣值計(jì)算。 6. Java 的數(shù)組 幾乎所有程序設(shè)計(jì)語(yǔ)言都支持?jǐn)?shù)組。若程序訪問(wèn)自己內(nèi)存塊以外的數(shù)組,或者在初始化之前使用內(nèi)存(屬于常規(guī)編程錯(cuò)誤),會(huì)產(chǎn)生不可預(yù)測(cè)的后果。 Java 的一項(xiàng)主要設(shè)計(jì)目標(biāo)就是安全性。一個(gè) Java 可以保證被初始化,而且不可在它的范圍之外訪問(wèn)。但由此換回的是更高的安全性,以及更高的工作效率。 創(chuàng)建對(duì)象數(shù)組時(shí),實(shí)際創(chuàng)建的是一個(gè)句柄數(shù)組。一旦 Java 看到 null,就知道該句柄并未指向一個(gè)對(duì)象。若試圖使用依然為 null 的一個(gè)句柄,就會(huì)在運(yùn)行期報(bào)告問(wèn)題。 也可以創(chuàng)建主類型數(shù)組。 數(shù)組問(wèn)題將在以后的章節(jié)里詳細(xì)討論。 8. 作用域 大多數(shù)程序設(shè)計(jì)語(yǔ)言都提供了“作用域”( Scope)的概念。在 C, C++和 Java里,作用域是由花括號(hào)的位置決定的。 { int q = 96。 在上面的例子中,縮進(jìn)排版使 Java 代碼更易辨讀。 注 意盡管在 C 和 C++里是合法的,但在 Java 里不能象下面這樣書寫代碼: { int x = 12。 } } 編譯器會(huì)認(rèn)為變量 x 已被定義。但這種做法在 Java 里是不允許的,因?yàn)?Java 的設(shè)計(jì)者認(rèn)為這樣做使程序產(chǎn)生了混淆。用 new 關(guān)鍵字創(chuàng)建一個(gè) Java 對(duì)象的時(shí)候,它會(huì)超出作用域的范圍之外。 the reason C++ is hybrid is to support backward patibility with the C language. Because C++ is a superset of the C language, it includes many of that language?s undesirable features, which can make some aspects of C++ overly plicated. The Java language assumes that you want to do only objectoriented programming. This means that before you can begin you must shift your mindset into an objectoriented world (unless it?s already there). The benefit of this initial effort is the ability to program in a language that is simpler to learn and to use than many other OOP languages. In t