java引用变量_java代码声明引用变量经验
1.static只能修飾類的成員變量,不能修飾方法里的局部變量。
因為static是在類加載時候將成員變量存儲進方法區的。
加載類的時候,是不去執行方法里的函數的。所以不會館方法里的代碼,自然就不會讀取到static變量了。
如,這個代碼就是錯誤的
classStudent{private stringname;public void setName(stringstr)
{static int a = 1;//這里錯誤,static只能修飾類的成員變量
}
}
2.new一個對象或者加載一個類的時候,是不是執行方法里的代碼的。
而且new的對象,在堆中的存儲空間就是成員變量的存儲空間。
方法函數是不占代碼的,方法里的代碼全都存儲在方法區里面。只有在執行方法時,才會找到方法區的代碼,放到cpu里執行
3.java對垃圾回收是通引用變量來管理內存的。引用變量分為靜態引用變量,成員變量,局部變量。
三種變量意味三種不同的生命周期對象。
局部變量,意味著方法執行時創建,執行完成后銷毀。其生命周期和方法一樣。
成員變量,意味著隨著此類被new創建時而創建,此對象被銷毀后跟隨銷毀,與對象的生命周期一樣。
static變量,意味著生命周期最長,隨著類被加載而創建,只要不認為控制垃圾回收,靜態變量是一直生存的。
4.非靜態方法可以調用靜態方法,靜態方法不能調用非靜態方法。
什么意思?答:因為靜態方法是在類加載時被存儲進方法區的,而非靜態方法是在程序執行時才調用的。一前一后,程序總是先加載后執行的,所以倆生命周期不一致,
只能后面的訪問前面的,即非靜態方法可以調用靜態方法。但靜態方法不能訪問非靜態方法,因為加載時,非靜態方法還沒被執行呢。
5.方法區的數據是線程共享的,每個線程都可以訪問修改方法區數據。所以要給設置static變量的static方法加鎖,以保證static變量的線程安全。
1.這里的synchronized鎖住的是Student.class這個對象。因為方法是靜態static的。
public classStudent {public static String name = "abc";public static String age = "123";
synchronizedpublic static void set(String name1,String age1) {
Student.name=name1;
Student.age=age1;
}
}
2.如果不加static,方法變為synchronized public ?void set(String name1,String age1) {}。鎖住的是這個對象的鎖。
public classStudent {public static String name = "abc";public static String age = "123";
synchronizedpublic void set(String name1,String age1) {
Student.name=name1;
Student.age=age1;
}
}
6.static變量設置private或者public問題。為了保證static變量線程安全,一般設置static變量的訪問屬性為private,然后再static變量的set方法設置為public并加鎖,以保證線程安全。
如:
public classStudent {private static String name = "abc";//private 修飾private static String age = "123";
synchronizedpublic static void set(String name1,String age1) {
Student.name=name1;
Student.age=age1;
}
}
7.局部變量的生命周期是在一個大括號內,即一個所處塊結束。如循環體內定義的int j;
java 是塊作用域
一個?{}?就是一個獨立的作用域空間
每次循環的時候,都會有一個新的作用域空間
你在for循環體外是看不到my的,也是因為超出了作用域空間。
循環第二次的時候,就有一個重名的my了呀?為什么還是能正常運行,不報錯?
總結
以上是生活随笔為你收集整理的java引用变量_java代码声明引用变量经验的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 珍珠葡萄的功效与作用、禁忌和食用方法
 - 下一篇: wxml修改样式_微信小程序 动态绑定事