更多詳情請戳-原文點我,點我
java中有很多的關(guān)鍵字,這些關(guān)鍵字在面試的時候還是在編寫的時候的使用以及原理的了解都會顯示出一個開發(fā)人員的技術(shù)水平。
static作為java中的關(guān)鍵字,可以修飾變量,方法,類,代碼塊,還有一個被忽略的功能就是靜態(tài)導(dǎo)包。
一:修飾變量
static修飾變量就是經(jīng)常聽說的靜態(tài)變量,這個變量不屬于一個對象,屬于一個類,在類加載的時候就被分配了內(nèi)存。在內(nèi)存中只有一個復(fù)制。調(diào)用方法也只能是Class.變量名,實力變量(非static修飾的變量)存在多個復(fù)制,但是需要注意的事不能再方法體中定義一個靜態(tài)變量
二:修飾方法
static修飾方法表明這個方法屬于一個類,如果沒有被修飾,則說明這個方法就是對象的方法。注意的是在static方法中不能使用this和super關(guān)鍵字(有可能調(diào)用這個方法的時候,類中的對象還沒有被創(chuàng)建出來)。靜態(tài)方法最重要的一個是實現(xiàn)一個單例。然而單例又分為餓漢式和懶漢式,下面分別來展示兩種單例模式:
1:餓漢式(在還沒有調(diào)用的時候就創(chuàng)建)
public class SingleTonDemo2 {
private static SingleTonDemo2 instance=new SingleTonDemo2();
private static SingleTonDemo2 getInstance(){
return instance;
} }
2:飽漢式(在調(diào)用的時候在new對象)
public class SingleTonDemo {
private static SingleTonDemo instance=null;
public SingleTonDemo(){};
public static SingleTonDemo getInstance(){
instance=new SingleTonDemo();
return instance;
}
}
三:靜態(tài)代碼塊
靜態(tài)代碼塊是獨立于靜態(tài)方法和靜態(tài)變量的,一般的作用就是給靜態(tài)變量賦值,靜態(tài)代碼塊的執(zhí)行時間是當(dāng)類被加載后就執(zhí)行,如果有多個代碼塊,則會按照先后順序執(zhí)行。比如下面的靜態(tài)代碼塊:
private static int a;
static{ a=4;}
四:靜態(tài)內(nèi)部類
靜態(tài)內(nèi)部類一般是指被static修飾的內(nèi)部類,一般可以做初始化變量的值,和初始化內(nèi)存的一些值。靜態(tài)內(nèi)部內(nèi)不能定義的和實力類相同的名字,而且是在外部類實例化后在去實例化內(nèi)部類。這里需要注意他的調(diào)用方式。如下:
public class StaticInnerClass {
private static int a=4;
static class innerClass{
void printNum(){
System.out.println(a);
}}
public static void main(String[] args) {
StaticInnerClass.innerClass innerclass=
new StaticInnerClass.innerClass();
innerclass.printNum();
}}
五:靜態(tài)導(dǎo)包
使用import static 代替import