第2章 一切都是对象
第2章一切都是對象
????? 對象的定義(類型)、創建、存儲、操縱、銷毀、組成,引用(基本變量名)的初始化????
?
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編碼風格
????? ·駝峰風格
轉載于:https://www.cnblogs.com/InformationGod/p/8510714.html
總結
以上是生活随笔為你收集整理的第2章 一切都是对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【专栏必读】王道考研408操作系统+Li
- 下一篇: ORACLE SGA问题分析