1. 程式人生 > >java中static特殊性和final(static成員直接被訪問,this不能用在static方法中,static不可訪問非static)

java中static特殊性和final(static成員直接被訪問,this不能用在static方法中,static不可訪問非static)

java的static關鍵字

    java中,static修飾的成員變數和成員方法叫靜態變數和靜態方法,不依賴類特定的例項,被類的所有例項共享。

static的方法和變數可直接用類名訪問;

    java中,Static類方法和類變數,先於例項(物件)存在,不用初始化類就可以直接用類名訪問。在類載入時Java虛擬機器根據類名在執行時資料區的方法區內找到Static方法。

靜態變數(又稱為類變數) 和 例項變數,區別是:

    靜態變數在記憶體中只有一個拷貝(節省記憶體),JVM只分配一次記憶體,在載入類的過程中完成靜態變數的記憶體分配,用類名直接訪問,也可以通過物件來訪問(不推薦,儘量不用)。
    例項變數在初始化後一個例項時為該例項分配一次記憶體,多個例項之間的例項變數是獨立的

非Static方法可以呼叫Static方法

    例項化後的方法,通過物件自身可以引用static方法

Static方法不能呼叫非靜態成員

    但靜態方法不能呼叫非靜態方法,以及引用非靜態成員變數。因為類未初始化,沒有例項,沒有分配記憶體,不能呼叫。

static方法中不能使用this

    在static方法中不能用this來訪問物件。this指標是類物件自身引用,需要類初始化類物件後才能使用,也就是new classA()後才能分配記憶體,才有this。
    如果設計類時,static函式必須用到某些類成員,則必須將該成員也定義為static。(記憶體有要求,要考慮記憶體是否夠用)

所以,java類main方法必須是 public static的

    類的main方法這樣就可以被外部直接訪問,(未住初始化就可以訪問)。並且,不初始化類物件不能訪問類的非static成員。

類未例項化(初始化new())時,需要訪問類內部函式,用java反射機制

java中final關鍵字

1.final的類不允許被繼承。
2.final方法不允許被覆蓋。
3.final變數只能被賦一次值。

判斷數: if(! parentRegionID.matches(“\d+”))
判斷字串:if(! parentRegionID.matches(“\w+”))
\轉義
^開頭