1.尚x谷javaSE面試題筆記(1-6)

自增變量

在這裏插入圖片描述
運行的結果:
在這裏插入圖片描述
解析:
對於:i=i++
在這裏插入圖片描述
這一行運算完了之後,i的值還是1.上述這個123對應的是字節碼的操作。
int j = i++,類似上面,運算完了之後j是1.但是因爲i進行了++,所以這一步最終i變成了2.
在這裏插入圖片描述
int k = i + ++ii–
在這裏插入圖片描述
操作數棧就是你運算的時候還沒賦值給某個變量的時候,變量值暫存的地方。局部變量空間就是最終賦值的時候,所在的空間。
也就是說,最後運算的是:int k = 2+3
3=11.
總結:
在這裏插入圖片描述

單例設計模式

在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述

餓漢-直接實例化餓漢式

在這裏插入圖片描述

餓漢-枚舉式

jdk1.5之後出的這種形式。因爲枚舉來自1.5版本。
在這裏插入圖片描述

餓漢-靜態代碼塊

在這裏插入圖片描述
效果跟直接餓漢式是一樣的。但是負責度上來了。使用場景往往是有變量需要在初始化的時候賦值的時候。如:
在這裏插入圖片描述
餓漢式都是不存在線程安全問題的。在類初始化的時候,直接創建實例對象。

懶漢式-線程不安全

在這裏插入圖片描述
單線程情況下是沒有問題的。多線程就出問題了。會創建多個實例。
多線程測試:
在這裏插入圖片描述
模擬創建對象的過程:
在這裏插入圖片描述
最終的結果就是創建了 多個實例了。

懶漢式-線程安全

使用同步關鍵字:
在這裏插入圖片描述
上面這種方式,實際上是防止創建時候併發,創建完了之後,直接返回就可以了,這樣可以改造一下。

在這裏插入圖片描述

懶漢式-靜態內部類

在這裏插入圖片描述
在內部類被加載和初始化時才創建對象。
靜態內部類不會隨着外部類的加載和初始化而初始化。他是要單獨加載和初始化的。這樣就實現了延遲創建對象。
因爲是在內部類加載和初始化時創建的,因此是線程安全的。
這種方式最簡潔,最推薦。
在這裏插入圖片描述

類初始化和實例初始化

在這裏插入圖片描述
運行結果:
在這裏插入圖片描述

類初始化的過程

在這裏插入圖片描述
所以對於上面,要初始化子類,會先初始化父類。先初始化靜態變量和代碼塊誰在上面誰先初始化。
所以先執行父類的method方法和靜態代碼塊,打印5,1。
然後執行子類的method靜態方法和靜態代碼塊,這裏靜態不存在重寫,打印10,6.

實例初始化的過程

在這裏插入圖片描述
關於super這裏聲明一點:寫或者不寫,在子類構造器中一定會調用父類的構造器。
所以:
在這裏插入圖片描述
所以創建實例會打印:
父類:9-3-2
子類:9-8-7

方法重寫

在這裏插入圖片描述
在這裏插入圖片描述
進階:
在這裏插入圖片描述

方法的參數傳遞機制

在這裏插入圖片描述
運行結果:num 應該是2
在這裏插入圖片描述
分析:
在這裏插入圖片描述
然後調用方法,在棧上開闢一塊空間存局部變量。發生了實參給形參賦值。內存的變化如下:
在這裏插入圖片描述
接下來,執行方法裏面的操作。要遵循方法的傳遞機制。
所以i,string,integer,操作完了之後,對原來的變量沒有影響。
string拼接之後,在常量池裏有了新的地址,發生了重新的指向。integer也是一樣的道理。
在這裏插入圖片描述
對於數組,傳遞的是地址,所以原來方法裏面的數組也發生了變化。對於obj對象,也是傳遞的地址,對以前對象裏面的成員變量發生了改動。
在這裏插入圖片描述

方法的傳參機制

在這裏插入圖片描述

String、包裝類等對象的不可變性

遞歸與迭代

在這裏插入圖片描述
針對這種類型的問題,有2種處理方式,遞歸或者迭代循環。

遞歸

進行分析,分析最後一步可能走一步或者兩步,抽象出遞歸的公式。
在這裏插入圖片描述

代碼實現,設計函數f(n):
在這裏插入圖片描述

循環遞歸

在這裏插入圖片描述
思路就是通過分析,保存前兩步的值,加起來就對了,就是我們想要的值。
在這裏插入圖片描述

這種寫法,不太好理解,編寫起來也更復雜。但是解釋度比遞歸要好。

總結

在這裏插入圖片描述

成員變量與局部變量

在這裏插入圖片描述

運行結果:
在這裏插入圖片描述

知識點

在這裏插入圖片描述

解析

首先非靜態代碼塊中的i是指的非靜態代碼塊中聲明的i,這是就近原則。
在這裏插入圖片描述
參數中傳進去一個j,然後全局變量也有j,此時就近原則,指的是參數中的j。

在這裏插入圖片描述
就近原則,還要遵守作用域的限制,所以15行的i指的是全局變量i,不是非靜態代碼塊中的i。

局部變量與成員變量的區別

在這裏插入圖片描述
在這裏插入圖片描述
實例變量是有初始化值的,比如你int,初始化值爲0.

jvm內存(擴展)

在這裏插入圖片描述
在這裏插入圖片描述
對於本題目,jvm三塊空間的內存模型:
在這裏插入圖片描述

重名區分

在這裏插入圖片描述

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