在Java中,static可以用來修飾成員變數和成員方法。 修飾成員變數,稱為靜態成員方法 修飾靜態方法,稱為靜態成員方法 搞清楚用法和區別之前,先搞清static聲明的變數和普通非靜態變數在記憶體的分佈是怎樣的,這樣的話,理解起來會事半功倍的。 代碼測試如下: 運行結果: 張三 王隔壁 在記憶體的結果 ...
在Java中,static可以用來修飾成員變數和成員方法。
修飾成員變數,稱為靜態成員方法
修飾靜態方法,稱為靜態成員方法
搞清楚用法和區別之前,先搞清static聲明的變數和普通非靜態變數在記憶體的分佈是怎樣的,這樣的話,理解起來會事半功倍的。
代碼測試如下:
public class Person { static String firstName; String lastName; public void showName(){ System.out.println(firstName+lastName); } public static void viewName(){ System.out.println(firstName); } }
public static void main(String[] args) { Person p =new Person(); //p.firstName="張"; Person.firstName = "張"; p.lastName="三"; p.showName(); Person p2 =new Person(); //p2.firstName="王"; Person.firstName="王"; p2.lastName="隔壁"; p2.showName(); }
運行結果:
張三 王隔壁
在記憶體的結果分析如下:
靜態成員變數載入在方法區,聲明一次,即可被所有類對象所使用
非靜態成員變數載入在堆記憶體,是每個對象內部維護的獨立變數,互相之間沒有影響
具體測試如下:
用法一:Static修飾成員變數
(1)修飾成員變數,叫做靜態成員變數
作用:靜態成員變數被當前所有類對象所共用
記憶體:存儲在方法區內
調用:A:類名.靜態成員變數 推薦使用
B:對象.靜態成員變數 不正規
public static void main(String[] args) { Person p =new Person(); //p.firstName="張"; Person.firstName = "張"; p.lastName="三"; p.showName(); Person p2 =new Person(); //p2.firstName="王"; Person.firstName="王"; p2.lastName="隔壁"; p2.showName(); } 運行結果: 張三 王隔壁
(2)修飾成員方法,叫做靜態成員方法
作用:靜態成員方法中只能直接的使用靜態成員方法和調用其他靜態成員方法
調用:A:類名.靜態方法 推薦使用
B:對象.靜態方法 不正規
public static void main(String[] args) { Person p =new Person(); //p.firstName="張"; Person.firstName = "張"; p.lastName="三"; p.showName(); Person p2 =new Person(); //p2.firstName="王"; Person.firstName="王"; p2.lastName="隔壁"; Person.viewName(); } 運行結果: 張三 王
區別:非static修飾的成員變數和成員方法
(1)非static修飾的成員變數 也稱實例變數
作用:是每個對象內部維護的獨立變數,互相之間沒有影響
記憶體:存儲在堆記憶體中
調用:對象.成員變數 唯一方式
(2)非static修飾的成員方法 也稱實例方法
作用:方法中可以使用靜態和非靜態的成員方法和成員變數
調用:對象.成員方法