1、修飾成員變量
在一個person類中,一個成員變量例如 String name,當new2個person()對象時候,這2個對象在堆的位置是不同的,給name賦值張三、李四,這兩個對象的name是互相不影響的。
當用static修飾時,例如static String name,這個變量是存在靜態區,被堆中的對象所共享。如果依次賦值給2個對象name張三、李四。最終2個對象的name為李四(因為后一次的賦值在靜態區中將前一次的賦值覆蓋);


該修飾只會在特定情況下使用,例如給一個數量統計count一個初始化值0,后續根據代碼邏輯增加。可以修飾為例如:private static int count=0;
2、修飾成員方法
static修飾方法后,最大的作用就是可以"類名.方法名"調用該方法。但是在實際開發中也少用到該方式,因為一是static修飾后的方法資源共享,在多線程場景不安全。二是靜態資源常駐內存,很難被回收;
static方法也是沒有this的方法,this代表當前對象。而static方法不需要對象;
主要用在沒有創建對象的時候調用方法/變量;
擴展:
構造器是靜態方法么?
構造器中可以有"this",並且當創建對象時必須new Person();此時用到了構造器。而static方法沒有this,也不屬於任何對象,並且構造器也不是方法。所以構造器不是靜態方法;
擴展:
構造器是靜態方法么?
構造器中可以有"this",並且當創建對象時必須new Person();此時用到了構造器。而static方法沒有this,也不屬於任何對象,並且構造器也不是方法。所以構造器不是靜態方法;
3、靜態塊
static修飾靜態塊后,將要修飾的成員同一放在一個static中。該靜態化會在第一次使用類時,最先初始化static修飾的靜態塊。並且在程序運行過程中,只需要初始化一次,不會進行多次初始化;

輸出結果:
animal staticcat staticanimal constructor
cat constructor
加載順序:首先運行main方法,但是在運行main方法之前會先加載類,發現Test繼承Base類,所有先加載Base類,再加載Test類。加載類的時候運行靜態代碼塊,所以依次輸出animal static、cat static。加載完類后執行main方法,創建對象new Cat(),執行構造器,先執行父類,再執行子類,則依次輸出animal constructor、cat constructor。(構造器在new對象后才會去初始化)
4、靜態導包
靜態導包指在導入包前用static修飾,作用是當使用靜態導包后,引用導入類的方法(變量)時,可以不用XXX=類名.方法,直接XXX=方法();(變量也是一樣);但是有一個缺點,如果頻繁使用靜態導包,會降低代碼可讀性。並且如果導入的不同類有相同方法名(或變量名),可能會沖突。
參考文章:https://www.cnblogs.com/dolphin0520/p/3799052.html
https://www.cnblogs.com/dotgua/p/6354151.html?utm_source=itdadao&utm_medium=referral
http://blog.csdn.net/qq_17864929/article/details/48006835