Java中的作用域有哪些
阿新 • • 發佈:2019-02-11
在計算機程式中,宣告在不同地方的變數具有不同的作用域,例如區域性變數、全域性變數等。在Java語言中,作用域是由花括號的位置決定的,它決定了其定義的變數名的可見性與生命週期。
在Java語言中,變數的型別主要有3種:成員變數、靜態變數和區域性變數。
- 類的成員變數的作用範圍與類的例項化物件的作用範圍相同,當類被例項化時,成員變數就會在記憶體中分配空間並初始化,直到這個被例項化物件的生命週期結束時,成員變數的生命週期才結束。
- 被static修飾的成員變數稱為靜態變數或全域性變數,與成員變數不同的是,靜態變數不依賴於特定的例項,而是被所有例項所共享,也就是說,只要一個類被載入,JVM就會給類的靜態變數分配儲存空間。因此,就可以通過類名和變數名來訪問靜態變數。
- 區域性變數的作用域與可見性為它所在的花括號內。
成員變數的4種作用域對比:
作用域與可見性 | 當前類 | 同一package | 子類 | 其他package |
---|---|---|---|---|
public | √ | √ | √ | √ |
private | √ | × | × | × |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
- public。表明該成員變數或方法對所有類或物件都是可見的,所有類或物件都可以直接訪問。
- private。表明該成員變數或方法是私有的,只有當前類對其具有訪問許可權,除此之外的其他類或者物件都沒有訪問許可權。
- protected。表明該成員變數或方法對自己及其子類是可見的,即自己和子類具有許可權訪問
- default。表明該成員變數或方法只有自己和與其同一包內的類可見。若父類與子類位於同一包內,則子類對父類的default成員變數或方法都有訪問許可權;若父類和子類位於不同包內,則沒有訪問許可權。
注意:
這些修飾符只能修飾成員變數,不能用來修飾區域性變數。private和protected不能用來修飾類。(只有public、abstract或final能用來修飾類)