參考書目:《Java編程思想》(第四版)
友鏈:【讀書筆記】Java重要知識點整理與匯總
閱讀《Java編程思想》(第四版)一書識訓頗多,之所以想通過用博客記筆記的方式來讀書,是因為這樣可以倒逼自己仔細、反復地閱讀書中的知識,找相對意義上的重點,并且由于人腦更適合輸出型的學習,通過將內容邊看、邊記、邊理解和邊打字寫文,相比直接反復閱讀更有效益(當然這本書后續仍需反復閱讀幾十遍甚至百遍以上都不為過),而另一個原因就是這樣也能夠在閱讀中通過博客來記錄自己的學習歷程,博客記錄的不只是圖文,它們記錄的正是自己的成長,等以后畢業或者作業后,回首大學四年,多少有點可以回念的東西,還可以說一句:一路走來,我讀了很多前輩們的好書,對技術充滿了熱情,永遠在不斷學習的路上,
start.作者講授思路:



1.五個不同的地方可以存盤資料:
(1)暫存器:這是最快的存盤區,它位于處理器內部,其數量及其有限,根據需求進行分配,你不能直接控制,也無法感知其存在(但C和C++運行向編譯器建議暫存器的分配方式),
(2)堆疊:位于通用RAM(隨機訪問存盤器)中,但通過堆疊指標可以從處理器那里獲得直接支持,堆疊指標向下移動,則分配新的記憶體,若向上移動,則釋放記憶體,這是一種快速有效的分配存盤方法,僅次于暫存器,Java系統必須知道存盤在堆疊內所有項的生命周期(限制了靈活性),以便上下移動堆疊指標,Java物件的參考便存盤于堆疊中,
(3)堆:是一種記憶體池(也位于RAM區),用于存放所有的Java物件,編譯器不需要知道存盤的資料在堆里的存活時間(體現了靈活性),new一個物件時,會自動在堆里進行存盤分配,用堆進行存盤分配和清理會比用堆疊花更多時間,
(4)常量存盤:常量值通常直接存放在程式代碼內部,這樣做是安全的,因為它們永遠不會被改變,
(5)非RAM存盤:如果資料完全存活于程式之外,那么它可以不受程式的任何控制,在程式沒有運行時也可以存在,如流物件和持久化物件,在流物件中,物件轉化成位元組流,在持久化物件中,物件被存放于磁盤上,程式終止后,它們仍可以保持自己的狀態,
2.對于一些基本型別,特別是小的、簡單的變數,Java采用和C、C++相同的方法,不用new來創建變數,而是創建一個并非是參考的“自動”變數,這個變數直接存盤“值”,并置于堆疊中,因此更加高效,但這些基本型別通常也具有相應的包裝器類,并可以反向轉換(將包裝器類的資料轉為簡單變數存盤),
3.高精度計算類BigInteger支持任意精度的整數,BigDecimal支持任意精度的定點數,它們以犧牲運算速度為代價,換取了精度,
4.Java物件不具備和基本型別一樣的宣告周期,當用new創建一個Java物件時,它可以存活于作用域之外:
{
String s = new String("a string");
}
參考s在作用域終點就消失了,然而s指向的String物件物體卻仍繼續占據記憶體空間,但我們無法在這個作用域之后訪問這個物件,因為對它唯一的參考已經超出了作用域的范圍,當Java的垃圾回收器監測到這些不會再被參考的物件時,就會釋放這些物件的記憶體空間,以便供其他新的物件使用,
5.呼叫方法的行為通常被稱為:發送訊息給物件,
int x = a.f();
訊息是f(),物件是a,
6.Java中為什么沒有sizeof()?
在C和C++中,需要使用sizeof()的最大原因是為了“移植”,不同資料型別在不同機器上可能有不同的大小;Java由于建設于JRE之上,所有在所有機器上資料型別的大小都相同,無需用sizeof(),
7.移位運算子:
(1)左移位運算子(<<):按照運算子右側指定的位數將運算子左邊的運算元向左移動(在低位補0)—[高位舍棄,低位補0]
(2)“有符號”右移運算子(>>):按照運算子右側指定的位數將運算子左邊的運算元向右移動(符號為正:在高位插入0; 為負:在高位插入1)
(3)“無符號”右移運算子(>>>):…在高位插入0
注:
移位+等號,指定移動的位數,例如:k >>>= 10
5 << 2:00000101 —> 00010100 由5變為20
>>:擴大2^k
<<:縮小2^k
end.結語
關于各種概念,剩余部分知識點,有些已與之前的讀書筆記書目內容有所交織,因此不再再次整理,可參考:
【讀書筆記】Java重要知識點整理與匯總
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/245667.html
標籤:其他
