1.內存分配:
靜態變量在應用程序初始化時,即是在類被加載的時候成員變量即被初始化,就存在於內存當中,直到它所在的類的程序運行結束時才消亡; 而非靜態變量需要被實例化后才會分配內存。非static修飾的成員變量是在對象new出來的時候划分存儲空間,是與具體的對象綁定的,該成員變量僅為當前對象所擁有的。
靜態方法和靜態變量創建后始終使用同一塊內存,是連續的。
非靜態方法會存在於內存的多個地方,是離散的。
static修飾的變量在加載的時候先於main方法加載在內存中的數據共享區——-方法區,而非static的變量在加載的時候,是要創建變量才加載在堆內存中的。
一個static變量單獨划分一塊存儲空間,不與具體的對象綁定在一起,該存儲空間被類的各個對象所共享。static變量值在方法區加載一次,而非static在創建對象時會加載很多次。每次創建都會拷貝一份。
2.生命周期:
靜態變量生存周期為應用程序的存在周期; 非靜態變量的存在周期取決於實例化的類的存在周期。
3.調用方式:
靜態變量只能通過“類.靜態變量名”調用,類的實例不能調用;非靜態變量當該變量所在的類被實例化后,可通過實例化的類名直接訪問。
對象在引用成員變量是直接通過類名.變量名調用,對象在引用實例變量時只能通過對象名.變量名調用。
在類中調用成員變量時直接調用或者以類名.變量名方式調用,實例變量則用this或者直接調用。
4.共享方式 :
靜態變量是全局變量,被所有類的實例對象共享,即一個實例的改變了靜態變量的值,其他同類的實例讀到的就是變化后的值,線程安全的; 非靜態變量是局部變量,不共享的,線程非安全的。
5訪問方式 :
靜態成員不能訪問非靜態成員; 非靜態成員可以訪問靜態成員。