Java 梳理總結(jié)關(guān)于static關(guān)鍵字常見問題
1、static是什么意思?
static 關(guān)鍵字表明一個成員變量或者是成員方法可以在沒有所屬的類的實(shí)例變量的情況下被訪問。
例如
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("靜態(tài)方法調(diào)用:f的值為" + f);
}
}
測試方法
import com.xiao.Main;
public class Test {
public static void main(String[] args) {
System.out.println("靜態(tài)變量:" + Main.f);
Main.show();
}
}
輸出結(jié)果
靜態(tài)變量:10
靜態(tài)方法調(diào)用:f的值為10
通過上述實(shí)例可以發(fā)現(xiàn),我們并沒有創(chuàng)建對象實(shí)例就可以對 Main類 中的被 static 修飾的變量和方法進(jìn)行調(diào)用。所以 static 關(guān)鍵字表明一個成員變量或者是成員方法可以在沒有所屬的類的實(shí)例變量的情況下被訪問。
2、為什么使用static關(guān)鍵字?
在以下兩種情況下,static 關(guān)鍵字,滿足了我們的需求。
- 通常來說,用
new創(chuàng)建類的對象時,數(shù)據(jù)存儲空間才被分配,方法才供外界調(diào)用。但有時我們只想為特定域分配單一存儲空間,不考慮要創(chuàng)建多少對象或者說根本就不創(chuàng)建任何對象。 - 再就是我們想在沒有創(chuàng)建對象的情況下也想使用變量和調(diào)用方法。
3、Java中是否可以覆蓋(override)一個private或者是static的方法?
Java中 static 方法不能被覆蓋,因?yàn)榉椒ǜ采w是基于運(yùn)行時動態(tài)綁定的,而 static 方法是編譯時靜態(tài)綁定的(就是當(dāng)類被 Java 虛擬機(jī)加載的時候,該靜態(tài)方法就會被連同類一起被加載,所以靜態(tài)方法是屬于類的,同時是編譯時靜態(tài)綁定的)。static 方法跟類的任何實(shí)例都不相關(guān),所以概念上不適用。
4、是否可以在static環(huán)境中訪問非static變量?
static 變量在Java中是屬于類的,它在所有的實(shí)例中的值是一樣的。當(dāng)類被Java虛擬機(jī)載入的時候,會對 static 變量進(jìn)行初始化。如果你的代碼嘗試不用實(shí)例來訪問非static的變量,編譯器會報錯,因?yàn)檫@些變量還沒有被創(chuàng)建出來,還沒有跟任何實(shí)例關(guān)聯(lián)上。
5、static靜態(tài)方法能不能引用非靜態(tài)資源?
不能。就是當(dāng)類被 Java 虛擬機(jī)加載的時候,該靜態(tài)方法就會被連同類一起被加載和初始化,所以靜態(tài)方法是屬于類的。而非靜態(tài)資源的話,只有在創(chuàng)建了對應(yīng)的實(shí)例之后才會被創(chuàng)建。而類的加載和初始化過程是在實(shí)例對象創(chuàng)建之前發(fā)生的,所以如果靜態(tài)方法引用了根本就不存在的非靜態(tài)資源的話,那么就會報出錯誤。
6、static靜態(tài)方法里面能不能引用靜態(tài)資源?
能。因?yàn)楫?dāng)類被 Java 虛擬機(jī)加載的時候, static 靜態(tài)方法和靜態(tài)資源會連同類一起被加載和初始化,那么此時 static 靜態(tài)方法可以訪問到對應(yīng)的靜態(tài)資源。所以 static 靜態(tài)方法里面能引用靜態(tài)資源。
7、非靜態(tài)方法里面能不能引用靜態(tài)資源?
能。因?yàn)殪o態(tài)資源會在類被 Java 虛擬機(jī)加載的時候就一起被加載和初始化好,而非靜態(tài)方法是當(dāng)實(shí)例對象被創(chuàng)建的時候才會被創(chuàng)建和初始化,所以當(dāng)非靜態(tài)方法被創(chuàng)建和初始化的時候?qū)?yīng)的靜態(tài)資源已經(jīng)存在了。所以非靜態(tài)方法里面能引用靜態(tài)資源。
8、java靜態(tài)變量、代碼塊、和靜態(tài)方法的執(zhí)行順序是什么?
- 代碼塊執(zhí)行順序:靜態(tài)代碼塊——> 構(gòu)造代碼塊 ——> 構(gòu)造函數(shù)——> 普通代碼塊
- 繼承中代碼塊執(zhí)行順序:父類靜態(tài)塊——>子類靜態(tài)塊——>父類構(gòu)造代碼塊——>父類構(gòu)造器——>子類構(gòu)造代碼塊——>子類構(gòu)造器。
Main類
package com.xiao;
/**
* @author :小肖
* @date :Created in 2022/3/11 12:37
*/
public class Main {
private Integer a;
//靜態(tài)代碼塊
static {
System.out.println("靜態(tài)代碼塊....");
}
//無參構(gòu)造器
public Main(){
System.out.println("無參構(gòu)造器....");
}
// 有參構(gòu)造
public Main(Integer a){
this.a = a;
System.out.println("有參構(gòu)造器....");
}
// 構(gòu)造代碼塊
{
System.out.println("構(gòu)造代碼塊....");
}
//普通初始化塊
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();
}
}
測試結(jié)果
靜態(tài)代碼塊....
構(gòu)造代碼塊....
無參構(gòu)造器....
普通初始化塊....
到此這篇關(guān)于Java 梳理總結(jié)關(guān)于static關(guān)鍵字常見問題的文章就介紹到這了,更多相關(guān)Java static關(guān)鍵字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java 日期與時間API相關(guān)用法總結(jié)
這篇文章主要介紹了Java 日期與時間API相關(guān)用法總結(jié),幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2021-02-02
詳解context root修改無效web修改項(xiàng)目路徑(eclipse)
這篇文章主要介紹了詳解context root修改無效web修改項(xiàng)目路徑(eclipse)的相關(guān)資料,需要的朋友可以參考下2017-04-04
Java數(shù)據(jù)結(jié)構(gòu)與算法實(shí)現(xiàn)遞歸與回溯
本文主要介紹了Java數(shù)據(jù)結(jié)構(gòu)與算法實(shí)現(xiàn)遞歸與回溯,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
SpringBoot項(xiàng)目打jar包與war包的詳細(xì)步驟
SpringBoot和我們之前學(xué)習(xí)的web應(yīng)用程序不一樣,其本質(zhì)上是一個 Java應(yīng)用程序,那么又如何部署呢?這篇文章主要給大家介紹了關(guān)于SpringBoot項(xiàng)目打jar包與war包的詳細(xì)步驟,需要的朋友可以參考下2023-02-02
Java實(shí)現(xiàn)字符串轉(zhuǎn)換成可執(zhí)行代碼的方法
今天小編就為大家分享一篇Java實(shí)現(xiàn)字符串轉(zhuǎn)換成可執(zhí)行代碼的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
Mybatis配置之properties和settings標(biāo)簽的用法
這篇文章主要介紹了Mybatis配置之properties和settings標(biāo)簽的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
如何使用Java給您的圖片瘦身之Thumbnailator技術(shù)
在java日常開發(fā)中經(jīng)常遇到對圖片資源的操作需求,如壓縮、縮放、旋轉(zhuǎn),下面這篇文章主要給大家介紹了關(guān)于如何使用Java給您的圖片瘦身之Thumbnailator技術(shù)的相關(guān)資料,需要的朋友可以參考下2022-10-10

