您好,登錄后才能下訂單哦!
本文小編為大家詳細介紹“Java中static關鍵字的常見問題有哪些”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Java中static關鍵字的常見問題有哪些”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
static
關鍵字表明一個成員變量或者是成員方法可以在沒有所屬的類的實例變量的情況下被訪問。
例如
Main類
package com.xiao; /** * @author :小肖 * @date :Created in 2022/3/11 12:37 */ public class Main { public static int f = 10; public static void show(){ System.out.println("靜態方法調用:f的值為" + f); } }
測試方法
import com.xiao.Main; public class Test { public static void main(String[] args) { System.out.println("靜態變量:" + Main.f); Main.show(); } }
輸出結果
靜態變量:10
靜態方法調用:f的值為10
通過上述實例可以發現,我們并沒有創建對象實例就可以對 Main類
中的被 static
修飾的變量和方法進行調用。所以 static
關鍵字表明一個成員變量或者是成員方法可以在沒有所屬的類的實例變量的情況下被訪問。
在以下兩種情況下,static
關鍵字,滿足了我們的需求。
通常來說,用 new
創建類的對象時,數據存儲空間才被分配,方法才供外界調用。但有時我們只想為特定域分配單一存儲空間,不考慮要創建多少對象或者說根本就不創建任何對象。
再就是我們想在沒有創建對象的情況下也想使用變量和調用方法。
Java中 static
方法不能被覆蓋,因為方法覆蓋是基于運行時動態綁定的,而 static
方法是編譯時靜態綁定的(就是當類被 Java 虛擬機加載的時候,該靜態方法就會被連同類一起被加載,所以靜態方法是屬于類的,同時是編譯時靜態綁定的)。static
方法跟類的任何實例都不相關,所以概念上不適用。
static
變量在Java中是屬于類的,它在所有的實例中的值是一樣的。當類被Java虛擬機載入的時候,會對 static
變量進行初始化。如果你的代碼嘗試不用實例來訪問非static的變量,編譯器會報錯,因為這些變量還沒有被創建出來,還沒有跟任何實例關聯上。
不能。就是當類被 Java 虛擬機加載的時候,該靜態方法就會被連同類一起被加載和初始化,所以靜態方法是屬于類的。而非靜態資源的話,只有在創建了對應的實例之后才會被創建。而類的加載和初始化過程是在實例對象創建之前發生的,所以如果靜態方法引用了根本就不存在的非靜態資源的話,那么就會報出錯誤。
能。因為當類被 Java 虛擬機加載的時候, static
靜態方法和靜態資源會連同類一起被加載和初始化,那么此時 static
靜態方法可以訪問到對應的靜態資源。所以 static
靜態方法里面能引用靜態資源。
能。因為靜態資源會在類被 Java 虛擬機加載的時候就一起被加載和初始化好,而非靜態方法是當實例對象被創建的時候才會被創建和初始化,所以當非靜態方法被創建和初始化的時候對應的靜態資源已經存在了。所以非靜態方法里面能引用靜態資源。
代碼塊執行順序:靜態代碼塊——> 構造代碼塊 ——> 構造函數——> 普通代碼塊
繼承中代碼塊執行順序:父類靜態塊——>子類靜態塊——>父類構造代碼塊——>父類構造器——>子類構造代碼塊——>子類構造器。
Main類
package com.xiao; /** * @author :小肖 * @date :Created in 2022/3/11 12:37 */ public class Main { private Integer a; //靜態代碼塊 static { System.out.println("靜態代碼塊...."); } //無參構造器 public Main(){ System.out.println("無參構造器...."); } // 有參構造 public Main(Integer a){ this.a = a; System.out.println("有參構造器...."); } // 構造代碼塊 { System.out.println("構造代碼塊...."); } //普通初始化塊 public void method(){ System.out.println("普通初始化塊...."); } }
測試類
import com.xiao.Main; public class Test { public static void main(String[] args) { Main main = new Main(); main.method(); } }
測試結果
靜態代碼塊....
構造代碼塊....
無參構造器....
普通初始化塊....
讀到這里,這篇“Java中static關鍵字的常見問題有哪些”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。