正如大家看到的那樣,默認的序列化機制並不難操縱。然而,假若有特殊要求又該怎麼辦呢?我們可能有特殊的安全問題,不希望對象的某一部分序列化;或者某一個
一個比較誘人的想法是用序列化技術保存程序的一些狀態信息,從而將程序方便地恢復到以前的狀態。但在具體實現以前,有些問題是必須解決的。如果兩個對象都有
Java IO流庫能滿足我們的許多基本要求:可以通過控制台、文件、內存塊甚至因特網(參見第15章)進行讀寫。可以創建新的輸入和輸出對象類型(通過從
(1) 打開一個文本文件,每次讀取一行內容。將每行作為一個String讀入,並將那個String對象置入一個Vector裡。按相反的順序打印出Ve
請考慮下面這個熟悉的類結構例子,它利用了多形性。常規類型是Shape類,而特別衍生出來的類型是Circle,Square和Triangle。這是一
為理解RTTI在Java裡如何工作,首先必須了解類型信息在運行期是如何表示的。這時要用到一個名為“Class對象”的特殊形
迄今為止,我們已知的RTTI形式包括:(1) 經典造型,如"(Shape)",它用RTTI確保造型的正確性,並在遇到一個失敗的
Java用Class對象實現自己的RTTI功能——即便我們要做的只是象造型那樣的一些工作。Class類也提供了其他大量方式
如果不知道一個對象的准確類型,RTTI會幫助我們調查。但卻有一個限制:類型必須是在編譯期間已知的,否則就不能用RTTI調查它,進而無法展開下一步的
很少需要直接使用反射工具;之所以在語言中提供它們,僅僅是為了支持其他Java特性,比如對象序列化(第10章介紹)、Java Beans以及RMI(
利用RTTI可根據一個匿名的基礎類句柄調查出類型信息。但正是由於這個原因,新手們極易誤用它,因為有些時候多形性方法便足夠了。對那些以前習慣程序化編
到目前為止,讀者應對對象的“傳遞”有了一個較為深刻的認識,記住實際傳遞的只是一個句柄。在許多程序設計語言中,我們可用語言的
將句柄傳遞進入一個方法時,指向的仍然是相同的對象。一個簡單的實驗可以證明這一點(若執行這個程序時有麻煩,請參考第3章3.1.2小節“賦
“別名”意味著多個句柄都試圖指向同一個對象,就象前面的例子展示的那樣。若有人向那個對象裡寫入一點什麼東西,就會產生別名問題
稍微總結一下:Java中的所有自變量或參數傳遞都是通過傳遞句柄進行的。也就是說,當我們傳遞“一個對象”時,實際傳遞的只是指
首先要解決術語的問題,最適合“按值傳遞”的看起來是自變量。“按值傳遞”以及它的含義取決於如何理解程
若需修改一個對象,同時不想改變調用者的對象,就要制作該對象的一個本地副本。這也是本地副本最常見的一種用途。若決定制作一個本地副本,只需簡單地使用c
盡管克隆方法是在所有類最基本的Object中定義的,但克隆仍然不會在每個類裡自動進行。這似乎有些不可思議,因為基礎類方法在衍生類裡是肯定能用的。但
理解了實現clone()方法背後的所有細節後,便可創建出能方便復制的類,以便提供了一個本地副本: //: LocalCopy.java/
調用Object.clone()時,實際發生的是什麼事情呢?當我們在自己的類裡覆蓋clone()時,什麼東西對於super.clone()來說是最