java私有靜態方法
一、private static
我們都知道想要保護一些資料,只要設定為private,並且在java中static多少有“共享”的意味存在,那麼既然已經private了,為什麼還要static?
編譯器對標記為靜態的函式無需檢測this指標是否為空,有時候這樣的檢測會對效能敏感的應用產生影響。說的比較籠統,其實原因是對非靜態函式來說,都會預設傳遞第一個this引數,就是this地址,呼叫的時候會首先壓入棧;如果是靜態函式,this指標的入棧這一步就免了。
雖然java是先編譯成class檔案後解釋執行在jvm上面的,但是在方法執行過程方面,其實與c,c++沒有很大的差別,java在class檔案中留有專門的位置表示this。其實和演算法、IO訪問、資料庫和網路訪問等比起來簡直就是微乎其微,後幾項對效能的影響可能是十倍甚至百倍的。
如果你的私有函式沒有訪問類裡面的其他引數和方法,又被頻繁呼叫,那就把他設為private static吧,沒有什麼壞處哦。其實JDK的原始碼裡面,也有大量使用私有靜態方法。
二、private static與public static的用法及區別
其實,理解這兩者的區別並不難,因為(public、private)和static這兩種修飾符的作用本就不同,所以要理解兩個的區別,其實就是這兩種修飾符效果累加起來之後的區別。
static:靜態修飾符,被static修飾的變數和方法類似於全域性變數和全域性方法,可以在不建立物件時呼叫,當然也可以在建立物件之後呼叫。常見的可以用於工具類的工具方法中等,譬如:Math類中的絕大多數方法都是靜態方法,他們扮演了工具方法的作用。
public:聲明當前被修飾的物件、方法、變數為公有的。這裡的公有指的是可以被公有訪問,你可以使用這個類所有的可見的東西都是被宣告為public的,公有可見且公有可被訪問的。
private:聲明當前被修飾的變數、方法為私有的。這裡的私有指的是僅僅可以被私有訪問,你在使用這個類時那些私有的東西的確有但是你訪問是非法的方法或者變數是被宣告為private的,私有不可見且不可訪問的。
所以,被private static修飾的屬性只能被本類中的方法(可以是非靜態的)呼叫,在外部建立這個類的物件或者直接使用這個類訪問都是非法的。被public static修飾的屬性除了可以被靜態方法和非靜態呼叫之外,還可以直接被類名和外部建立的物件呼叫。
三、總結
private static是合法的,且有著其獨到的用處:為靜態方法提供私有靜態屬性。public static常用的是為該類提供對外暴露即可以被類名直接呼叫的靜態常量。