JAVA關於靜態static的面試題
1.靜態(static)
static表示“全局”或者“靜態”的意思,用來修飾成員變量和成員方法,也可以形成靜態static代碼塊。
static修飾的變量習慣稱為靜態變量,static修飾的方法稱為靜態方法,static修飾的代碼塊叫做靜態代碼塊。
static的意義在於方便在沒有創建對象的情況下來進行調用(方法/變量)。
“static方法就是沒有this的方法。在static方法內部不能調用非靜態方法,反過來是可以的。而且可以在沒有創建任何對象的前提下,僅僅通過類本身來調用static方法。這實際上正是static方法的主要用途。”
2.靜態的具體用法
參考:
https://www.cnblogs.com/0mbiubiu/p/5331390.html
補充:靜態內部類
https://blog.csdn.net/cd18333612683/article/details/79129503
https://baijiahao.baidu.com/s?id=1593244425455663032&wfr=spider&for=pc
3.靜態的注意事項
4.靜態的優缺點
優點:
對對象的共享數據提供單獨空間的存儲,節省空間,沒有必要每一個對象都存儲一份
可以直接被類名調用,不用在堆內存創建對象
靜態成員可以通過類名直接訪問,相對創建對象訪問成員方便
弊端:
訪問出現局限性。(靜態雖好,但只能訪問靜態)
5.關於靜態的面試題
(1)Q:抽象的(abstract)方法是否可同時是靜態的(static)?
A:抽象方法將來是要被重寫的,而靜態方法是不能重寫的,所以這個是錯誤的。
(2)Q:是否可以從一個靜態(static)方法內部發出對非靜態方法的調用?
A:不可以,靜態方法只能訪問靜態成員,非靜態方法的調用要先創建對象。
(3) Q:static 可否用來修飾局部變量?
A:static 不允許用來修飾局部變量
(4)Q:內部類與靜態內部類的區別?
A:靜態內部類相對與外部類是獨立存在的,在靜態內部類中無法直接訪問外部類中變量、方法。如果要訪問的話,必須要new一個外部類的對象,使用new出來的對象來訪問。但是可以直接訪問靜態的變量、調用靜態的方法;
普通內部類作為外部類一個成員而存在,在普通內部類中可以直接訪問外部類屬性,調用外部類的方法。
如果外部類要訪問內部類的屬性或者調用內部類的方法,必須要創建一個內部類的對象,使用該對象訪問屬性或者調用方法。
如果其他的類要訪問普通內部類的屬性或者調用普通內部類的方法,必須要在外部類中創建一個普通內部類的對象作為一個屬性,外同類可以通過該屬性調用普通內部類的方法或者訪問普通內部類的屬性
如果其他的類要訪問靜態內部類的屬性或者調用靜態內部類的方法,直接創建一個靜態內部類對象即可。
(5)Q:Java中是否可以覆蓋(override) 一個private或者是static的方法?
A:Java中static方法不能被覆蓋,因為方法覆蓋是基於運行時動態綁定的,而static方法是編譯時靜態綁定的。static方法跟類的任何實例都不相關,所以概念上不適用。