java中有不少的關鍵字,這些關鍵字在面試的時候仍是在編寫的時候的使用以及原理的瞭解都會顯示出一個開發人員的技術水平。
static做爲java中的關鍵字,能夠修飾變量,方法,類,代碼塊,還有一個被忽略的功能就是靜態導包。
static修飾變量就是常常據說的靜態變量,這個變量不屬於一個對象,屬於一個類,在類加載的時候就被分配了內存。在內存中只有一個複製。調用方法也只能是Class.變量名,實力變量(非static修飾的變量)存在多個複製,可是須要注意的事不能再方法體中定義一個靜態變量html
static修飾方法代表這個方法屬於一個類,若是沒有被修飾,則說明這個方法就是對象的方法。注意的是在static方法中不能使用this和super關鍵字(有可能調用這個方法的時候,類中的對象尚未被建立出來)。靜態方法最重要的一個是實現一個單例。然而單例又分爲餓漢式和懶漢式,下面分別來展現兩種單例模式:java
1:餓漢式(在尚未調用的時候就建立)面試
public class SingleTonDemo2 { private static SingleTonDemo2 instance=new SingleTonDemo2(); private static SingleTonDemo2 getInstance(){ return instance; } }
2:飽漢式(在調用的時候在new對象)this
public class SingleTonDemo { private static SingleTonDemo instance=null; public SingleTonDemo(){}; public static SingleTonDemo getInstance(){ instance=new SingleTonDemo(); return instance; } }
靜態代碼塊是獨立於靜態方法和靜態變量的,通常的做用就是給靜態變量賦值,靜態代碼塊的執行時間是當類被加載後就執行,若是有多個代碼塊,則會按照前後順序執行。好比下面的靜態代碼塊:code
private static int a; static{ a=4;}
靜態內部類通常是指被static修飾的內部類,通常能夠作初始化變量的值,和初始化內存的一些值。靜態內部內不能定義的和實力類相同的名字,並且是在外部類實例化後在去實例化內部類。這裏須要注意他的調用方式。以下:htm
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(); }}
使用import static 代替import