Java中的static關鍵字個人看法總結
阿新 • • 發佈:2018-12-21
static概括:方便在沒有建立物件的情況下來進行呼叫方法/變數,而非static的變數和方法,只有例項存在才存在。
static可以用來修飾類的成員方法、類的成員變數,另外可以編寫static程式碼塊來優化程式效能。
靜態變數和非靜態變數的區別是:
但需要注意static不會改變方法/變數的訪問許可權,java中方法/變數訪問許可權 只和private、public、protected這幾個關鍵字有關。 同時,在Java中static是不允許用來修飾區域性變數。至於為什麼,我很想回答這是Java死規定,沒有為什麼,但是還是闡述一下個人理解, 在類中,被標記為static的方法和變數,jvm就會認為你要延長其生命週期,既然延長就直接申明為全域性變數,所以沒有必要使用static修飾區域性變數,即 類在 static在。
- 沒有this的方法,因為靜態方法不依賴於任何物件就可以進行訪問。
- 在static方法內部不能呼叫非靜態方法,反之可以,因為沒有this,所以在靜態方法中不能訪問類的非靜態成員變數和非靜態成員方法。
- 可以在沒有建立任何物件的前提下,通過類本身來呼叫static方法,因為被static關鍵字修飾的方法或者變數 不需要依賴於物件進行訪問,只要類被載入了就可以通過類名進行訪問。
static可以用來修飾類的成員方法、類的成員變數,另外可以編寫static程式碼塊來優化程式效能。
- static方法
- static變數
- 靜態變數被所有的物件所共享,在記憶體中只有一個副本,它當且僅當在類初次載入時會被初始化。
- 而非靜態變數是物件所擁有的,在建立物件的時候被初始化,存在多個副本,各個物件擁有的副本互不影響。
- static程式碼塊
但需要注意static不會改變方法/變數的訪問許可權,java中方法/變數訪問許可權 只和private、public、protected這幾個關鍵字有關。 同時,在Java中static是不允許用來修飾區域性變數。至於為什麼,我很想回答這是Java死規定,沒有為什麼,但是還是闡述一下個人理解, 在類中,被標記為static的方法和變數,jvm就會認為你要延長其生命週期,既然延長就直接申明為全域性變數,所以沒有必要使用static修飾區域性變數,即 類在 static在。
- 靜態內部類
public class OuterClass {
static class StaticInnerClass {//內部靜態類 ,不能與外部類重名
//只可以訪問OuterClass的靜態成員 ,不能直接訪問外部類的例項欄位和例項方法
}
}
- 內部類
public class Outer {
public class Inner{//成員類不能與外部類重名,成員類不能是介面(interface)
//成員類可訪問外部類的任一個例項欄位和例項函式。
//不能在成員類中定義static欄位、方法和類(static final形式的常量定義除外),因為一個成員類例項必然與一個外部類例項關聯,這個static定義完全可以移到其外部類中去
//成員類可以定義為介面(interface) ,但不能是介面,沒有實際意義,成員類定義是為了能被某個外部類例項例項化,而介面是不能例項化的。
}
}
- 靜態導包