由於項目需要,我要在很短的時間內掌握java和android。基礎的重要性無需多言,不過在時間緊張的情況下,我用一週多的時間草草看了下think in java 這本書。最鬱悶的是時間太有限,而書中的很多精華被我一個走馬觀花的人忽略。所以覺得還是有必要寫成筆記,待日後不斷補充。
本系列是Thinking in Java 的閱讀學習筆記,按照書中的結構,共包括20篇。
一切都是對象 —— Everything is an object
一切都是對象這章是讓人初識Java的。。
對於有一定基礎的程序員來說,或許接觸過C,JS,那麼面對java,他最關心的也許是以下問題:
1 java和c有啥不同?
2 java有啥特點?
3 java程序如何寫?
那麼圍繞這三點,作者首先介紹了Java和c的不同,java沒有指針,另外,java的虛擬機有內建的垃圾回收機制,程序員無須自己去做垃圾回收工作啦。然後java的特點就是一切都是對象,這些對象必須由你創建。最後像所有語言的開篇一樣,hello world啦一下,這裏引入了static關鍵字。
那麼具體展開,可以分下面四點簡述一下。
1 java沒有指針
學過指針的人都知道指針是一個地址,指向存儲對象的地址。那麼java把指針去除了,意味着程序員無需直接操作地址,不能把指針相加。不過java中雖然沒有啦指針,但引用本質上也是存儲對象的地址,每實例化一個對象a,其實都相當於在堆棧中存儲了一個對實例化對象的引用。java的引用是放在堆棧的,而new的對象是放在堆的。
什麼是堆棧,你可以把內存空間想象成兩塊區域。一塊是索引區,一塊是數據區,索引區是個數組,存儲對對象的引用,數據區存放實在的東東哦。。
2 永遠不用銷燬對象。
js中有個作用域鏈,在函數內定義的局部變量只在本函數內有效,在所有函數外定義的變量在JS中叫做全局變量,若全局變量和局部變量重名啦,局部變量的優先級高於全局變量。換句話說,位於作用域鏈上方的變量會覆蓋下面的。
但在java中,作用域只在 {} 之間,離開這是範圍就死掉了,就被自動回收啦。
另外java的類的成員變量java會自動初始化,變成,0,false,null之類的。在js中若沒有初始化一律都是undefined。
3 一切都是對象
和js類似,java中也有基本數據對象,但是java中的數組比較特殊,js中的數組是引用類型,java的數組不是類,但也比較特殊,以後單獨講。
java中對於每一種基本類型都有相應的包裝類。
boolean char byte short int long float double void
Boolean Character Byte Short Integer Long Float Double Void
對於這些基本類型,若不能滿足對象的參數條件,可以用包裝類包裝。
有兩個高精度類,BigInteger與BigDecimal,他們無對應的基本類型
4 static
當聲明一個事物爲static時,就意味着這個域或方法不會與包含它的那個類的任何對象實例關聯在一起。
所以即使從未創建某個類的任何對象,也可以調用static方法或者訪問其static域。也就是說static和類相關,但是和類的實例化對象無關。