《JAVA編程思想》前四章總結

這本書前四章非常的基礎,所以就用一篇文章大略總結一下前四章一些重要知識點

1.JAVA的8種基本數據類型

2.static關鍵字的用法

static關鍵字,可以修飾變量、方法和靜態代碼塊。

static關鍵字的基本作用,簡而言之,就是方便在沒有創建對象的情況下來進行調用(方法/變量)。

static修飾變量(靜態變量):靜態變量被所有的對象所共享,在內存中只有一個副本,它當且僅當在類初次加載時會被初始化

而非靜態變量是對象所擁有的,在創建對象的時候被初始化,存在多個副本,各個對象擁有的副本互不影響。

static修飾方法(靜態方法):工具類的方法,不需要建立對象,直接使用“類名.方法名”的方式調用

由於靜態方法不依賴於任何對象就可以進行訪問,因此對於靜態方法來說,是沒有this的,因爲它不依附於任何對象,既然都沒有對象,就談不上this了。並且由於這個特性,在靜態方法中不能訪問類的非靜態成員變量和非靜態成員方法,因爲非靜態成員方法/變量都是必須依賴具體的對象才能夠被調用。但是要注意的是,雖然在靜態方法中不能訪問非靜態成員方法和非靜態成員變量,但是在非靜態成員方法中是可以訪問靜態成員方法/變量的。

static修飾靜態代碼塊:只會在類初次加載時候執行一次,可以用於初始化等操作

提問:若父類中有一個static靜態變量,它的子類A可以繼承這個static靜態變量嗎?如果子類A將這個變量值改變了,子類B和父類中這個變量會有影響嗎?

答:子類是不繼承父類的static變量和方法的。因爲這是屬於類本身的。但是子類是可以訪問的。但是相當於這個static靜態變量是唯一的,子類訪問後修改了值,當然子類B和父類再訪問這個變量時,值已經變了。

那如果是在接口中呢?

答:接口中的變量都會被final和static兩個關鍵字修飾,所以無法被改變。

3.“==” 和equals方法的區別

“==”: 如果是基本數據類型,直接對值進行比較;如果是引用數據類型,則是對它們的地址進行比較。  

“equals方法”:該方法是可以覆蓋重寫的。如果不重寫,equals方法相當於“==”即兩個對象的地址是否相等。如果重寫,通常我們會將equals複寫成:當兩個對象內容相同時,返回true,否則返回false。

 

4.foreach、普通for循環、迭代器三種的區別和這三種哪個效率高 

循環ArrayList時,普通for循環比foreach循環花費的時間要少一點;循環LinkList時,普通for循環比foreach循環花費的時間要多很多。當我將循環次數提升到一百萬次的時候,循環ArrayList,普通for循環還是比foreach要快一點;但是普通for循環在循環LinkList時,程序直接卡死。foreach底層就是迭代器,所以foreach和迭代器是差不多,可能在一些情況下,迭代器更優。

結論:需要循環數組結構的數據時,建議使用普通for循環,因爲for循環採用下標訪問,對於數組結構的數據來說,採用下標訪問比較好。需要循環鏈表結構的數據時,一定不要使用普通for循環,這種做法很糟糕,數據量大的時候有可能會導致系統崩潰。

具體地foreach和迭代器實現和知識點總結看十一章和十七章總結那篇博客。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章