標籤:tor 不可用 android基礎 分區 單鏈表 dict 代碼 回收對象 bsp
Java基礎
物件導向三個特徵
封裝 繼承 多態
多態
定義 允許不同類的對象對同一訊息做出響應
技術 動態綁定 執行期間判斷所引用對象的實際類型 根據實際類型調用相應方法
作用 消除類型之間的耦合關係
條件 繼承 重寫 父類引用指向子類對象
好處 擴充 替換 介面 靈活 簡化
介面意義
規範 擴充 回調
抽象類別意義
為其它子類提供一個公用類型
封裝子類中重複定義的內容
定義抽象方法 子類中有不同的實現但是定義是一致的
抽象類別介面區別
預設方法 抽象類別可以有預設方法實現 介面中沒有
實現方式 抽象類別extends 介面 implements
構造器 抽象類別中可以有 介面沒有
和正常類區別 介面不可執行個體化 介面是不同的類型
存取修飾詞 介面預設public 其它不能
多繼承 一個子類可以存在多個介面
Override和Overload區別
Override 重寫 子類對父類同一方法的重新定義
Overload 重載 定義一個與已定義方法名稱相同但簽名不同的新方法
父類的靜態方法能否被子類重寫
不能 稱為隱藏
內部類作用
switch能否用String做參數
Java7前 只支援byte short char int及對應封裝類 Enum
Java7 支援String
九種基礎資料型別 (Elementary Data Type)
boolean Boolean
byte 1 Byte
short 2 Short
int 4 Integer
long 8 Long
float 4 Float
double 8 Double
char 2 Character
void Void
Java集合
Collection
AbstractList
Vector
ArrayList
AbstractSequentialList
LinkedList
Map
AbstractMap
HashMap
TreeMap
Dictionary
Hashtable
AbstractSet
HashSet
TreeSet
Vector
基於數組實現
很多方法加入synchronized同步語句 保證安全執行緒
允許元素為null
現在基本不使用
ArrayList
基於數組實現
非安全執行緒 只能單線程環境使用
允許元素為null
尋找效率高 插入刪除需要移動大量元素 效率低
LinkedList
基於雙向迴圈鏈表實現 可做鏈表 棧 隊列 雙端隊列
非安全執行緒 只能單線程環境使用
允許元素為null
插入刪除效率高 尋找效率低
HashMap
基於雜湊表實現 每一個元素是一個key-value 內部通過單鏈表解決衝突
非安全執行緒
key-value都允許為空白
TreeMap
基於紅/黑樹狀結構實現 特殊二叉排序樹
key不能為null
查詢 插入 刪除都沒有HashMap效率高 一般需對key排序才用
Hashtable
基於雜湊表實現 1.0引入
安全執行緒
key-value都不允許為空白
HashSet
通過Map中的HashMap實現
TreeSet
通過Map中的TreeMap實現
JVM
四種引用
強引用 new記憶體空間不足JVM不會回收
軟引用 記憶體空間不足 JVM會回收
弱引用 JVM一旦發現 無論當前記憶體空間是否充足都會回收
虛引用 它指向的對象回收時 它會加入到引用隊列中 由此可知它指向的對象何時銷毀
分區
線程共用
Java堆 存放所有對象執行個體和數組
方法區 存放已被虛擬機器載入的類資訊 常量 靜態變數 即時編譯器編譯後的代碼
線程私人
程式計數器 當前線程所執行位元組碼的行號指標
虛擬機器棧 Java方法執行的記憶體模型
每個方法被執行都會建立一個棧幀
棧幀用於儲存局部變數表 運算元棧 動態連結 方法返回地址 一些額外附加資訊
本地方法棧 與虛擬機器棧類似 為native方法服務
分區例子
Object obj = new Object()
obj作為參考型別儲存在虛擬機器棧中
該引用的執行個體化對象儲存Java堆中
該物件類型資料的地址資訊儲存在方法區
記憶體流失
分配出去的記憶體沒有回收回來 失去了對該記憶體地區的控制 造成了資源浪費
記憶體溢出
程式所需要的記憶體超出了系統所能分配記憶體的上限
記憶體回收判斷方法
引用計數
對象有引用計數器加1 引用失效減1 為0的對象不可被使用
很難解決對象循環參考的問題
引用鏈
通過一系列GC Roots的對象作為起始點
從這些節點向下搜尋所走過的路徑稱為引用鏈
當一個對象到GC Roots無任何引用鏈相連 則證明該對象不可用
記憶體回收演算法
標記清除法
標記所有需要回收的對象 標記完成後統一回收
標記和回收效率不高 產生大量記憶體片段
複製演算法
將記憶體劃分為大小相等兩塊 每次只使用其中一塊 當一塊使用完了
將還存活的對象複製到另一塊上面 已使用的一次性清理掉
標記整理 適合老年代
標記所有需要回收對象 讓所有存活對象都向一端移動
然後直接清理掉邊界以外的記憶體
Android基礎筆記