---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO開發S</a>、<a href="http://edu.csdn.net"target="blank">.Net培訓</a>、期待與您交流! ----------------------
3.6 static關鍵字
1、共享數據:static用於修飾成員(成員函數,成員變量),這些成員都是被對象共享的成員。
2、特點
①、隨類的加載而加載,消失而消失。
②、優先於對象而存在
③、被所有對象所共享
④、可以直接被類名所調用
代碼示例
class Chinese { static String country = "中國";//共享數據 String name; int age; void singOurCountry(){ System.out.println("啊,親愛的"+country); } } public class AboutStaticKey { public static void main(String[] args) { System.out.println(Chinese.country); //當成員被靜態修飾後,除了可以被對象調用之外,還可以被類名調用 Chinese ch = new Chinese(); System.out.println("Chinese country is " + ch.country); ch.singOurCountry(); } }
3、實例變量與類變量的區別
①、存儲位置
前者隨對象的建立而存在於堆內存中
後者隨着類的加載而存在於方法區中
②、生命週期
前者隨着對象的消失而消失
前者隨着類的的消失而消失
③、調用方式
前者可以被對象及類名調用,但建議用類名調用
後者只能被對象調用
4、靜態的使用注意事項:
①、靜態的方法只能訪問靜態成員
②、靜態方法中不可以使用this或super關鍵字
③、靜態省略的是類名,成員變量省略的是this
④、主函數是靜態的
public static void main(String[] args)
1)、public:代表着該函數的權限最大
2)、static:代表主函數歲類的加載而加載就已經存在
3)、void:主函數沒有返回值
4)、main:不是關鍵字,是一個特殊的單詞,可以被jvm識別。
5)、String[] args:函數的參數,參數類型是一個數組,該數組中的元素師字符串,字符串類型的數組。
5、靜態的利弊
①、利:對對象的共享數據進行單獨空間的存儲,節省空間,可以被類名直接調用。
②、弊:生命週期過長,而且訪問有侷限性
6、什麼時候使用靜態?
①、靜態變量:如果對象中出現共享數據時,該數據被靜態修飾,對象中的特有數據定義在堆內存中
②、靜態函數:函數是否用靜態修飾,就看該函數功能是否需要訪問對象中的特有數據,需要,該功能爲非靜態;不需要,就定義成靜態
7、靜態代碼塊
①、格式:
static
{
code;
}
②、特點:隨類的加載而執行,且只執行一次,並優先於主函數而執行
③、作用:給類進行初始化
8、面試題:
class StaticCode { StaticCode(){ System.out.println("b");//因爲沒有創建過與之相關的對象,從而沒有被執行過,所以不打印b } static//靜態代碼塊給類初始化 { System.out.println("a"); } {//構造代碼塊給對象初始化,其優先級比構造函數高,因爲構造函數有針對性,而構造代碼塊可以初始化所有對象 System.out.println("c"); } StaticCode(int x){//構造函數給對應的對象初始化 System.out.println("d"); } public static void show(){ System.out.println("show run"); } } class StaticCodeDemo { public static void main(String[] args) { new StaticCode(4); } } 問打印結果是?爲什麼? 結果:a c d,
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS開發</a>、<a href="http://edu.csdn.net"target="blank">.Net培訓</a>、期待與您交流! ----------------------
詳細請查看:<ahref="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>