面試 Java 基礎八股文十問十答第十二期
作者:程序員小白條,個人博客
相信看了本文后,對你的面試是有一定幫助的!關注專欄后就能收到持續更新!
?點贊?收藏?不迷路!?
1)創建一個對象用什么關鍵字?對象實例與對象引用有何不同?
關鍵字: 在Java中,使用new
關鍵字來創建一個對象。
對象實例與對象引用的區別:
- 對象實例(Object Instance): 表示在內存中實際存在的對象,擁有自己的狀態和行為。
- 對象引用(Object Reference): 是指變量,用來指向對象實例在內存中的位置。它本身并不包含對象的實際數據,只是指向對象的地址。
2)成員變量與局部變量的區別有哪些
成員變量(Member Variables):
- 成員變量屬于類,不在方法中聲明。
- 它們在類的任何地方都可見,可以被類中的任何方法、構造函數或者塊訪問。
- 每個對象的成員變量在內存中獨立存在,每個對象都有一組自己的成員變量副本。
局部變量(Local Variables):
- 局部變量聲明在方法、構造函數或者塊中,并且在這些區域內可見。
- 它們在方法、構造函數或塊執行時創建,執行完畢后消失。
- 局部變量在棧內存中分配。
3)成員變量和局部變量的區別
主要區別:
- 成員變量是類的一部分,每個對象都有自己的一份,而局部變量存在于方法、構造函數或塊中,只在執行時才分配內存,方法執行完畢后就會被銷毀。
- 成員變量可以擁有訪問修飾符(public、private、protected、default),而局部變量不可以。
- 成員變量在默認情況下會被初始化,而局部變量不會,必須在使用之前顯式初始化。
總結:
成員變量用于描述對象的狀態,局部變量用于臨時存儲數據或執行計算。成員變量與對象的生命周期相關聯,而局部變量的生命周期只存在于其所在的方法、構造函數或塊中。
4)在Java中定義一個不做事且沒有參數的構造方法的作用
在Java中定義一個不做事且沒有參數的構造方法(無參構造方法)的作用主要有兩個:
- 提供默認構造方法: 如果在類中沒有顯式定義任何構造方法,Java會默認提供一個無參構造方法。這使得可以通過
new
關鍵字創建對象而不需要提供參數。 - 子類調用父類無參構造方法: 如果一個類沒有顯式聲明任何構造方法,而其子類又沒有調用父類其他構造方法,那么子類在構造時會默認調用父類的無參構造方法。
5)在調用子類構造方法之前會先調用父類沒有參數的構造方法,其目的是?
在Java中,當創建一個子類對象時,在調用子類的構造方法之前,會隱式調用父類的無參數構造方法。這個過程的目的是確保父類的初始化完成,子類在構造過程中可以正確地使用從父類繼承的屬性和行為,保證繼承關系的正確性。
6)一個類的構造方法的作用是什么?若一個類沒有聲明構造方法,改程序能正確執行嗎?為什么?
作用: 類的構造方法用于初始化對象,在創建對象時執行必要的初始化操作,如設置初始狀態、分配資源等。
沒有聲明構造方法的情況:
如果一個類沒有顯式聲明任何構造方法,Java會提供一個默認的無參構造方法。但如果類中有顯式聲明了構造方法,而沒有默認的無參構造方法,則在創建對象時必須調用其中的一個已聲明的構造方法,否則編譯會報錯。
程序能否正確執行:
- 若一個類沒有顯式聲明任何構造方法,Java會提供一個默認的無參構造方法,因此程序可以正確執行。
- 若一個類有顯式聲明了構造方法,但沒有默認的無參構造方法,并且在創建對象時沒有調用已聲明的構造方法,則編譯會報錯,程序無法執行。
原因:
Java要求在對象創建時必須執行構造方法以完成對象的初始化工作。如果類沒有顯式聲明構造方法,則會提供默認的無參構造方法。但如果類有顯式聲明了構造方法,而沒有默認的無參構造方法,而在創建對象時又沒有調用已聲明的構造方法,則無法完成對象的初始化,因此編譯會報錯。
7)構造方法有哪些特性?
構造方法的特性包括:
- 與類同名: 構造方法的名稱必須與類的名稱完全相同。
- 無返回類型: 構造方法沒有返回類型,甚至沒有
void
關鍵字。 - 用于對象初始化: 構造方法用于在創建對象時執行必要的初始化操作。
- 可以有參數: 構造方法可以接受參數,這些參數用于初始化對象的屬性。
- 默認構造方法: 如果類沒有顯式聲明構造方法,Java會提供一個默認的無參構造方法。
- 重載: 一個類可以有多個構造方法,通過參數的不同來進行構造方法的重載。
8)靜態變量和實例變量區別
靜態變量(類變量):
- 屬于類,而不是類的實例。
- 使用
static
關鍵字聲明。 - 所有對象共享同一份靜態變量。
- 在類加載時初始化,不依賴于對象的創建。
實例變量(成員變量):
- 每個對象都有一份獨立的實例變量。
- 不使用
static
關鍵字聲明。 - 每個對象的實例變量值可以不同,它們屬于對象的狀態。
9)靜態變量與普通變量區別
靜態變量:
- 屬于類,使用
static
關鍵字聲明。 - 在類加載時初始化,不依賴于對象的創建。
- 所有對象共享同一份靜態變量。
普通變量(非靜態變量):
- 屬于對象,不使用
static
關鍵字聲明。 - 在對象創建時初始化,每個對象有自己的一份普通變量。
- 每個對象的普通變量值可以不同,它們屬于對象的狀態。
10)靜態方法和實例方法有何不同?
靜態方法:
- 使用
static
關鍵字聲明。 - 可以直接通過類名調用,不需要創建對象。
- 不能訪問實例變量,只能訪問靜態變量。
實例方法:
- 沒有使用
static
關鍵字聲明。 - 必須通過對象調用,需要先創建對象。
- 可以訪問實例變量和靜態變量。
總結:
靜態方法主要用于不依賴于實例變量的操作,而實例方法通常用于依賴于對象狀態的操作。靜態方法在類加載時初始化,而實例方法需要通過對象調用。
開源項目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system
前后端總計已經 700+ Star,1W+ 訪問!
?點贊?收藏?不迷路!?