面試題精選(查漏補缺)

介紹下Java內存區域與Java內存模型

Java虛擬機在運行程序的過程中,會把它自動管理的內存劃分爲以上幾個區域,每個區域都有其用途以及創建銷燬的時機,其中藍色代表的是所有線程共享的數據區域,而綠色部分代表的是每個線程的私有區域
這裏寫圖片描述
方法區(Method Area)
方法區屬於線程共享的內存區域,又稱Non-Heap,主要用於存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯後的代碼等數據,根據Java虛擬機規範的規定,當方法區無法滿足內存分配需求時,將拋出OutOfMemoryError異常。
值得注意的是在方法區中存在一個叫運行時常量池的區域,它主要用於存放編譯器生成的各種字面值常量和符號引用,這些內容將在類加載後存放到運行時常量池中,以便後續使用
JVM堆(JVM Heap)
Java堆也是屬於線程共享的內存區域,它在虛擬機啓動時候創建,是Java虛擬機所管理的內存中最大的一塊,主要用於存放對象實例,幾乎所有的對象實例都在這裏分配內存,注意Java堆是GC管理的主要區域,一次很多時候也被稱爲GC堆,如果在堆中沒有內存完成實例分配,並且堆也無法再擴展時,將會拋出OutOfMemoryError 異常。
程序計數器(Program Counter Register)
屬於線程私有的數據區域,是一小塊內存空間,主要代表當前線程所執行的字節碼行號指示器。
字節碼解釋器工作時,通過改變這個計數器的值來選取下一條需要執行的字節碼指令,分支、循環、跳轉、異常處理、線程恢復等基礎功能都需要依賴這個計數器來完成。
虛擬機棧(JVM Stacks)
屬於線程私有的數據區域,與線程同時創建,總數與線程關聯,代表Java方法執行的內存模型。
每個方法執行時,都會創建一個棧幀來存儲方法的變量表、操作數棧、動態鏈接方法、返回值、返回地址等信息。每個方法從調用到結束就對應於一個棧幀在虛擬機棧中的入棧和出棧過程
本地方法棧(Native Method Stacks)
本地方法棧屬於線程私有的數據區域,這部分主要與虛擬機用到的Native方法相關,一般情況下,我們無需關心此區域。

static和final修飾的類、方法、變量

static修飾的方法:
父類中的靜態方法可以被繼承,但不能被子類重寫
如果在子類中寫一個與父類中一樣的靜態方法,那麼該靜態方法由該子類特有,兩者不構成重寫關係
final修飾:
1、final修飾的類不允許被繼承
2、final修飾的方法可以被子類繼承,但不允許被重寫,不能修飾構造方法
3、修飾變量表示不允許被修改
方法內部的局部變量,使用前被賦值即可,不一定非得初試化
類中的成員變量(如果沒有在定義時候初始化,那麼只能在構造代碼塊或者構造方法中賦值)
基本類型的變量(初始化賦值後不能更改)
引用數據類型的變量(初始化之後不能再指向另外一個對象,但對象的內容是可以變的)

volatile怎麼用

parseInt()怎麼用

parseInt() 方法用於將傳進來的String解析爲有符號的十進制整數進行。
如果方法有兩個參數, 使用第二個參數指定的基數,將傳進來的String解析爲有符號的整數。
static int parseInt(String s)
static int parseInt(String s, int radix)
但是 這個string必須要是十進制數,否則會報錯java.lang.NumberFormatException

流程控制語句分哪幾種?選擇語句有哪些?

可以分爲選擇語句、循環語句、轉向語句、返回語句四類
if和swtch,他們只能選擇不能重複執行

抽象類裏邊的抽象方法可以有方法體嗎?

當然不能

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