第2章一切都是對象html
對象的定義(類型)、建立、存儲、操縱、銷燬、組成,引用(基本變量名)的初始化 java
2.1 用引用操縱對象編程
·編程語言操縱內存中元素的方式:數組
·C、C++:基於特殊語法的間接表示—指針安全
·Java:操縱對象引用 ->對象編程語言
·建立引用工具
·建立對象優化
·關聯:「=」編碼
·String類型:用帶引號的文本初始化指針
·對引用的初始化
2.2 必須由你建立全部對象
·存儲位置
·寄存器:最快;CPU內;數量有限;按需分配;沒法直接控制;覺察不到存在(C、C++容許向編譯 器建議寄存器的分配方式);【誰在操控寄存器?】
·堆棧:速度僅次於寄存器;RAM中;堆棧指針控制;
·堆棧指針:{向下移動:分配內存;向上移動:釋放內存}
·靈活受限:統必須知道存儲在堆棧內全部項的確切生命週期,以便上下移動指針;
·{對象引用:堆棧;new出的對象:堆}
·堆:比棧慢;RAM中;用於存放全部的Java對象
·和堆棧相比:
·好處:編譯器不須要知道存儲的數據在堆裏存活多長時間,更靈活
·壞處:進行存儲分配和清理比堆棧要更多時間
·常量存儲:一般放在程序代碼內,安全,永不改變
·嵌入式系統:同代碼分離,存放在ROM中
·非RAM存儲:流對象 & 持久化對象——徹底存活於程序以外;不受程序的 任何控制
·流對象(序列化 - 輕量級持久化):對象轉化成字節流,一般被髮送給另外一臺機器
·持久化對象:存在磁盤上;須要時可恢復成基於RAM的對象
·嚴格持久化:JDBC、Hibernate機制
·特例:基本類型:並不是是引用的「自動」變量,直接存「值」,堆棧中
·佔據存儲空間的大小不變
·boolean類型~存儲空間(大小):沒有明確指定,僅定義爲可以取字面量true或false
·void是基本類型(返回類型)但沒有值,有包裝器類型
·什麼是拆箱比較?
·BigInteger & BigDecimal:大致上屬於「包裝器類」,但沒有對應的基本類型
·方法調用方式 而非運算符方式
·速度換取了精度
·Java中的數組
·C、C++中的數組 = 內存塊:
·問題:
1.可能在初始化前被使用(內存);
2.訪問自身內存塊以外的數組
·Java:
·確保數組會被初始化後才能使用——每一個數組上少許的內存開銷
·不能在它的範圍以外被訪問——運行時的下標檢查
·Java有時能夠優化以上操做
·Java KO. C、C++:更安全,效率更高
·Java編譯器初始化數組:
·引用數組:null
·基本數據類型數組:0
2.3 永遠不須要銷燬對象
·做用域決定變量名的可見性、生命週期
·(做用域內的)代碼(通常)存在於堆棧中
·Java對象:和基本類型生命週期不一樣——new出來的對象在堆中,能夠存活於做用域以外
·存活於做用域以外:也就是說,做用域內的東西被清理後,垃圾回收器會在任意時間回收它
·Java垃圾回收器監視new建立的對象,辨別不會再被引用的對象,隨後【何時?】釋放這些對象的內存空間~消除了「內存泄漏」
·不用new建立對象的方式:
·Class或Constructor類的newInstance()方法
·clone()
·反序列化
·那麼問題來了,這些對象怎麼清理?finalize()?
2.4 建立新的數據類型:類
·類[字段不是局部變量,方法]
·基本類型成員默認值
2.5 方法、參數和返回值
·方法[名稱,參數,返回值,方法體]
·方法簽名[方法名,參數列表]
·發送消息給對象 = 調用方法的行爲
·參數列表:傳遞對象時,傳遞的是對象引用或基本類型值
·字符串中每一個字符(2字節):來支持Unicode字符集
2.6 構建一個Java程序
·名字(可見性):反轉域名
·運用其餘構件:使用import定位文件
·static關鍵字:
·爲某特定域分配單一存儲空間
·建立不與對象關聯的方法
2.7 你的第一個Java程序
·編譯,運行
2.8 註釋和嵌入式文檔
·註釋文檔
·javadoc:提取註釋的工具
·語法:
·javadoc命令只能在"/**----*/"中出現
·使用方式:
1.嵌入HTML
2.使用「文檔標籤」:以「@」開頭
·三類註釋文檔位置:類、域、方法之前
·只有public、protected成員的文檔註釋才能被輸出(可用-private進行標記輸出private註釋)
·不要嵌入html標題標籤:如<h1>或<hr>
·提取註釋:javadoc
2.9編碼風格
·駝峯風格