static
static可修飾屬性、方法、內(nèi)部類、代碼段
static強(qiáng)調(diào)的是只有一份,且可改變,但是在原有的地址空間上進(jìn)行改變。
如:
static修飾屬性
public class Test {
//當(dāng)加載類時(shí)就會(huì)優(yōu)先初始化t變量,所以是在運(yùn)行期前初始化空間。
//在此之后使用Test.t = "test2"這樣的語句,可以修改成功。
private static String t = "test";
}
static修飾方法:
public class Test {
// 可以通過Test.main()來進(jìn)行調(diào)用。也是在加載字節(jié)碼時(shí)初始化。
public static void main(String[] args) {
...
}
}
static修飾的內(nèi)部類:
public class Test {
// 修飾靜態(tài)內(nèi)部類(ps內(nèi)部類分為:成員內(nèi)部類、局部?jī)?nèi)部類、靜態(tài)內(nèi)部類、匿名內(nèi)部類)
static class StaticInnerClass {
}
static修飾的代碼片段:
public class Test {
// 修飾靜態(tài)方法
static void fun() {
}
jvm內(nèi)存主要分為
- stack segment
- heap segment
- code segment
- data segment
static作為類共享的修飾符,可以被類中任何地方調(diào)用訪問。static修飾的變量存放在code segment。而一般的變量存在實(shí)例中,實(shí)例存在于heap segment,變量的引用存放在stack segment中。
final
- final修飾的類不能被繼承
- final修飾的方法,無法被子類重寫
- final修飾的變量,無法修改值,
final String a;,因?yàn)樵诔跏蓟瘯r(shí)沒有賦值,之后a變量不能再賦值修改。
static final
static final和final static沒什么區(qū)別,一般static寫在前面。
- 常量,在加載時(shí)不依賴類,即在常量是在加載類之前加載的,加載常量后,才加載類,所有的常量會(huì)維護(hù)在常量池中。