【Java知識點】面試中會問到的那些小知識(1)
- 前言
- 一、Java類加載的機制
- 二、關鍵字
- 三、堆、堆疊
- 參考文章
前言
本文與之后的幾篇文章將是某整理的學習筆記,在此與諸位分享
以下是本篇文章正文內容,該系列會持續更新,敬請關注,
一、Java類加載的機制
- 類加載的機制
- Java編譯器將.java檔案編譯成擴展名為.class的檔案
- .class檔案中保存著java轉換后虛擬機將要執行的指令
- 當需要這個類時,Java虛擬機會加載.class檔案,并創建對應的class物件,將class檔案加載到虛擬機的記憶體
- 類加載的程序
加載 - -> 驗證 - -> 準備 - -> 決議 - -> 初始化
- 加載:
類加載的一個程序,ClassLoader通過一個類的完全限定名查找此類位元組碼檔案,并利用位元組碼檔案創建一個class物件
- 驗證:
目的在于確保class檔案的位元組流中包含資訊符合當前虛擬機的要求,不會危害虛擬機自身安全
- 這里主要包括四種驗證:檔案格式的驗證,元資料的驗證,位元組碼的驗證,符號參考的驗證
- 準備:
為類變數(static修飾的欄位變數)分配記憶體并且設定該類變數的初始值
- 這里不包含final修飾的static,因為final在編譯的時候就已經分配了
- 這里不會為實體變數分配初始化,類變數會分配在方法區中,實體變數會隨著物件分配到Java堆中
- 決議:
這里主要的任務是把常量池中的符號參考替換成直接參考
- 初始化:
這里是類記載的最后階段,如果該類具有父類就進行對父類初始化,執行其靜態初始化器(靜態代碼塊)或靜態初始化成員變數
二、關鍵字
在Java學習中有很多關鍵字需要我們掌握,這里暫時只舉例static和final關鍵字,
- static
- static是一個修飾符,用于修飾類的成員方法、類的成員變數,另外撰寫static代碼塊來優化程式性能
- static修飾變數時
- 被static修飾的成員變數屬于類,不屬于某一個物件
- 被static修飾的成員變數也可以通過類名來訪問
- 注意事項
static關鍵字用來形成靜態代碼塊以優化程式性能
- 靜態只能訪問靜態
- 非靜態既可以訪問非靜態,也可以訪問靜態
- final
final關鍵字代表最終、不可改變的,
- final可以用來修飾一個類
一個類如果是final的,那么其中所有的成員方法都無法進行覆寫重寫
- final可以用來修飾成員方法
當final關鍵字用來修飾一個方法的時候,這個方法就是最終方法,也就是不能被覆寫重寫
- 對于類、方法來說,abstract關鍵字和final關鍵字不能同時使用,因為二者是矛盾的
- final可以修飾區域變數
一旦使用final來修飾區域變數,那么這個變數就不能進行改變
- 對于基本型別來說,不可變說的是變數中的資料不可改變
- 對于參考型別來說,不可變說的是變數中的地址值不可變
- final可以修飾成員變數
對于成員變數來說,如果使用final關鍵字修飾,那么這個變數也照樣是不可改變的
在這里有一個容易混淆的地方,即final與finally的區別
- final作為關鍵字用來修飾限定
- finally則是例外中與try-catch配套的一條陳述句,它的作用是用來執行無論是否出現例外都會執行的陳述句
綜上,final是最終修飾符,static是靜態修飾符,那么static和final可以一起使用嗎?
答案是肯定的,
- static修飾的時候代表物件是靜態的
- final修飾的時候代表物件只能賦值一次
- 他們連用時是因為被定義的物件要求既是靜態的,同時還要求它的值不能再被修改
- 簡言之,當一個常數或字串是我們需要在程式里反復使用時,我們就可以把它定義為static final,這樣記憶體就不會重復申請和釋放空間
三、堆、堆疊
堆疊是JVM中比較重要的一塊內容,完整的JVM記憶體包括:
Java堆、Java堆疊、元空間(方法區)、本地方法堆疊、程式計數器(PC暫存器)
在本文中暫且只對堆和堆疊做概述
- 堆
- 堆是動態的,用于動態分配記憶體
- 每當我們創建(new)任何物件時,它總是在堆空間中創建
- 堆疊
- 用于執行執行緒,存放程式中的方法體(堆疊幀)
- 每個執行緒都會有一個私有的堆疊,每個執行緒中方法的呼叫又會在本堆疊中創建一個堆疊幀
- 每一個堆疊幀的資料大小與生命周期都必須是確定的,因此堆疊相對來說缺乏靈活性
- 堆疊幀遵循先進后出的原則,在JVM中對Java堆疊只進行兩種操作——壓堆疊和彈堆疊
參考文章
static
Java類加載機制
JVM記憶體結構組成
JVM記憶體結構和Java記憶體模型
作業系統,堆疊(stack),堆(heap),詳解
同時也推薦看看這些文章
普歌-逆越團隊:Java基礎知識點(運行背景,程式開發三步驟,入門知識點)
- 作者:CEMER216
- 本文著作權歸作者和CSDN共有,歡迎轉載,且在文章頁面明顯位置給出原文鏈接,未經作者同意必須保留此段宣告,否則保留追究法律責任的權利,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/272175.html
標籤:其他
