【正文】
方返回。下面是一些例子: boolean flag(){return true。 通過上面的例子,還可以了解到 return 關鍵 字的用法,它包括兩方面: 首先,它代表“已經(jīng)做完,離開此方法”。 } 此方法告訴你,需要多少個字節(jié) 才能容納一個特定的 String 對象中的信息( 字符串的每個字符的尺寸都是 16 位或 2 個字節(jié),以此來提供對 Unicode 字符集的支持 ) 。像 Java 中任何傳遞對象的場合一樣,這里傳遞的實際上也是引用,并且引用類型必須正確。面向對象的程序設計通常簡單 地歸納為“向對象發(fā)送消息”。如果有個名為 a 的對象,可以通過它調(diào)用 f(),那么就可以這樣寫: int x = ()。如果試圖在某個對象上調(diào)用 它并不具備的方法,那么在編譯時就會得到一條錯誤消息。參數(shù)列表給出了要傳遞方法的信息的類型和名稱。盡管這只是用詞上的差別,但本書將沿用 Java 的慣用法,即用術語“方法”而不是“函數(shù)”來描述。告訴你此變量沒有初始化,這正是 Java 優(yōu)于 C++的地方。因此如果在某個方法定義中有 int x。 基本成員默認值 若累的某個 成員是基本數(shù)據(jù)類型,即使沒有進行初始化, Java 也會確保它獲得一個默認值, 當變量作為類的成員使用時, Java 才確保給定其默認值,以確保那些是基本類型的成員變量得到初始化 ( C++沒有 此功能 ) ,防止產(chǎn)生程序錯誤。在這種情況下,只需要再使用連接句點即可。具體的實現(xiàn)為 :在對象引用的名稱之后緊接著一個句點,然 后再接著是對象內(nèi)部的成員名稱: 例如: = 47。 double d。 字段可以是任何類型的對象,可以通過其引用與其進行通信;也可以是基本類型中的一種。然而,你已經(jīng)可以用 new來創(chuàng)建這種類型的對象 。然而,從歷史發(fā)展角度來看,大多數(shù)面向對象的程序設計語言習慣用關鍵字 class來表示 “我準備告訴你一種新類型的對象看起來像什么樣子”。也就是說,你根本不必擔心內(nèi)存回收的問題。如果 Java 讓對象繼續(xù)存在,那么靠什么才能防止這些對象填滿內(nèi)存空間,進而阻塞你的程序呢?這正是 C++里可能會發(fā)生的問題。 事實 證明,由 new 創(chuàng)建的對象,只要你需要,就會一直保留下去。 // End of scope } 引用 s在作用域終點就消失了。因為 Java 設計者認為這樣做會導致程序混亂。 盡管 以下 代碼在 C和 C++中是合法的,但是在 Java 中卻不能這樣寫: { int x = 12。 q available } //only x available //q is “ out of scope” } 在作用域里定義的變量只可用于作用域結束之前。在 C、 C++和 Java 中,作用域由花括號的位置決定。 永遠不需要銷毀對象 在大多數(shù)程序設計語言中,變量生命周期的概念,占據(jù)了程序設計工作中非常重要的 部分 。因此,常犯的數(shù)組錯誤在 Java 中就可以避免。但由此換來的是安全性和效率的提高,因此付出的代價是值得的(并且 Java 有時可以優(yōu)化這些操作)。如果一個程序要訪 問其自身內(nèi)存塊之外的數(shù)組,或在數(shù)組初始化前使用內(nèi)存(程序中常見的錯誤),都會產(chǎn)生難以預料的后果。 BigDecimal 支持任何精度的定點數(shù),例如,可以用它進行精確的貨幣計算。由于這么做復雜了許多,所以運算速度會比較慢。雖然它們大體上屬于“包裝器類”的范疇,但二者都沒有對應的基本類型。 Character ch = new Character(c)。 所有數(shù)值類型都有正負號,所以不要去尋找無符號的數(shù)值類型。這個變量直接存儲“值”,并置于堆棧中 ,因此更加高效??梢园阉麄兿胂癯伞盎尽鳖愋?。對于這些類型的數(shù)據(jù)存儲,一個特別有用的技巧就是它們能存在于其他媒體中。其中兩個最重 要的例子便是“ 流式對象”和“持久化對象”。這樣做是安全的,因為 他們永遠都不會改變。執(zhí)行這些代碼時,會在堆里自動進行數(shù)據(jù)的保存。一種 通用 的內(nèi)存池(也在 RAM 區(qū)域), 用于存放所 有的 Java 對象。創(chuàng)建程序時, Java 編譯器必須準確地知道堆棧內(nèi)保存的所有數(shù)據(jù)的“長度”以及“存在時間”。 ( 2)堆棧。有六個地方都可以保存數(shù)據(jù): ( 1)寄存器。對我們來講,最重要的就是記住能自行創(chuàng)建類型。所以在上面的例子中,可以說: String s = new String(“ asdf” )。通常,必須為對象使用一種更通用的初始化 方法 。若此時向 s 發(fā)送一條消息,就會獲得一個錯誤(運行期)。 此外,即使沒有電視機,遙控板亦可獨立存在??蓪⑦@一情形想象成用遙控板(句柄)操縱電視機(對象)。您曾利用一些特殊語法直接操作過對象,或處理過一些間接表示的對象嗎( C或 C++里的指針)? 所有這些在 Java 里都得到了簡化,任何東西都可看作對象。只有做好這個準備工作,與其他 OOP 語言相比,才能體會到 Java 的易學易用。雜合語言允許采用多種編程風格;之所以說 C++是一種雜合語言,是因為它支持與 C語言的向后兼容能力。 指導教師評語: 簽名: 2021 年 月 日 (用外文寫 ) 附件 1:外文資料翻譯譯文 一切都是對象 “ 如 果我們說另一種不同的語言,那么我們就會發(fā)覺一個有些不同的世界”。 — Ludwig Wittgenstein(18891951) “盡管以 C++為基礎,但 Java 是一種更純粹的面向對象程序設計語言”。由于 C++是 C的一個 超集 ,所以包含的許多特性都是后者不具備的,這些特性使 C++在某些地方顯得過于復雜。在本章,我們將探討 Java 程序的基本組件,并體會為什么說 Java 乃至 Java 程序內(nèi)的一切都是對象。因 此,我們可采用一種統(tǒng)一的語法,任何地方均可照搬不誤。只要握住這個遙控板,就相當于掌握了與電視機連接的通道。也就是說,只是由于擁有一個句柄,并不表示必須有一個對象同它連接。 這是由于 s 實際并未與任何東西連接(即“沒有電視機”)。 有對象都必須創(chuàng)建 創(chuàng)建句柄時,我們希望它用一個新對象連接。 它不僅指出“ 給我一個新的字符串 ”,也通過提供一個初始字符串 ,指出了“如何生成這個新字串”。 事實上,這應是 Java 程序設計的一項基本操作,是繼續(xù)本書后余部分學習的基礎。這是最快的保存區(qū)域,因為它位于 不同于其他存儲區(qū)的地方 —— 處理器內(nèi)部。駐留于常 規(guī) RAM(隨機訪問存儲器)區(qū)域,但可通過它的“堆棧指針”獲得處理的直接支持。這是由于它必須生成相應的代碼,以便向上和向下移動指針。和堆棧不同,“內(nèi)存堆”或“堆”( Heap)最吸引人的地方在于編譯器不必知道要從堆里分配多少存儲空間,也不必知道存儲的數(shù)據(jù)要在堆里停留多長時間。當然,為達到這種靈 活性,必然付出一定的代價:在堆里分配存儲空間時會花掉更長的時間(如果確實可以在 Java 中像在 C++中一樣在棧中創(chuàng)建對象)。有的常數(shù)需要嚴格地保護,所以可考慮將他們置入只讀存儲器( ROM) 。對于流式對象,對象會轉化成字節(jié)流,通常會發(fā)給另一臺機器。一旦需要,甚至能將他們恢復成普通的、基于 RAM 的對象。之所以特殊對待,是因為 new 將對象存儲在“堆”里,故用 new 創(chuàng)建一個對象 ——特別是小的、簡單的變量, 往往不是很有效。 Java 要確定每種基本類型所占存儲空間的大小。 Boolean 類型所占存儲空間的大小沒有明確指定,僅定義為能夠 取 字面值true 或 false。 也可以這樣用: Character ch = new Character(‘ x’ )。 不過,這兩個類包含的方法,提供的操作與對基本類型所能執(zhí)行的操作相識。在這里,我們以速度換取了精度。 關于調(diào)用這兩個類的構造器和方法的詳細信息,請查閱 JDK 文檔。 Java 的主要目標之一是安全性,所以許多在 C和 C++里困擾程序員的問題在 Java 里不會再出現(xiàn)呢。 當創(chuàng)建一個數(shù)組對象時,實際上就是創(chuàng)建了一個引用數(shù)組,并且每個引用都會自動初始化為一個特定值,該 值擁有自己的關鍵字 null。 還可以創(chuàng)建用來存放基本數(shù)據(jù)類型的數(shù)組。變量需要存活多長時間?如 果想要銷毀對象,那什么時刻進行呢?變量生命周期的混亂往往會導致大量的程序 bug,本節(jié)將介紹 Java 是怎樣替我們完成所有的清理工作,從而大大簡化這個問題的。例如: { int x = 12。 任何位于“ //”之后到行末的文字都是注釋。 { int x = 96。 對象的作用域 Java 對象不具備和基本類型一樣的生命周期。然而, s 指向的 String 對象仍繼續(xù)占據(jù)內(nèi)存空間。這樣,許多 C++編程問題在 Java 中就完全消失了。這也是 Java 神奇之 所在。你只需要創(chuàng)建對象,一旦不再需要,他們就會自行消失。 class 這個關鍵字(以后會頻繁使用,本書以后就不再用粗體字表示)之后緊跟著的是新類型的名稱。 ATypeName a = new ATypeName()。如果字段是對某個對象的引用,那么必須初始化該 引用,以便使其與一個實際的對象(如前所述,使用 new 來實現(xiàn))相關聯(lián)。 Boolean b。 = 。例如: = 100。但是,這些初始值對你的程序來說,可能是不正確的,甚至是不合法的。 那么變量 x 得到的可能是任意值(與 C和 C++中一樣),而不會被自動初始化為零。(許多 C++編譯器會對未初始化變 量給予警告,而 Java 則視為是錯誤)。 Java 的方法決定了一個對象能 夠接收什么樣的消息。方法名和參數(shù)列表(它們合起來被稱為“方法簽名”)唯一地標識出某個方法。通過對象調(diào)用方法時,需要先列出對象名,緊接著句點,然后是方法名和參數(shù)列表。 返回值的類型必須要與 x的類型兼容。 參數(shù)列表 方法的參數(shù)列表指定要傳遞給方法什么樣的信息。如果參數(shù)被設為 String 類型,則必須傳遞一個 String 對象;否則,編譯器將拋出錯誤。此方法的參數(shù)類型是 String,參數(shù)名是 s。其次,如果此方法產(chǎn)生一個值,這個值要放在 return 語句后面。} double naturalLogBase(){return 。但如果返回類型不是 void,那么無論在何處返回,編譯器都會強制返回一個正確類型的返回值。 附件 2:外文 原文 Everything Is an Object “If we spoke a different language, we would perceive a some what different world.” Ludwig Wittgenstein (18891951)Although it is based on C++, Java is more of a “pure” objectoriented language. Both C++ and Java are hybrid languages, but in Java the designers felt that the hybridization was not as important as it was in C++. A hybrid language allows multiple programming styles。 C++, on the other hand, allow you to suggest register allocation to the piler). 2. The stack. This lives in the general randomaccess memory (RAM) area, but has direct support from the processor via its stack pointer. The stack pointer is moved down to create new memory and moved up to release that memory. This is an extremely fast and efficient way to allocate storage, second only to registers. The Java system must know, while it is creating the program, the exact lifetime of all the items that are stored on the stack. This constraint places limits on the flexibility of your programs, so while some Java storage exists on the stack—in particular, object references—Java objects themselves are not placed on the stack. Special case: primitive types One group of types, which you?ll use quite often