宣告類時,若是在屬性或方法前面加上static
代表這個屬性或方法屬於靜態屬性、靜態方法,所有實例化的類會共用這一個靜態屬性、靜態方法。
可以修飾的部分有:
public class MobileTest {
public static void main(String[] args) {
System.out.println(Mobile.system); // null
Mobile m1 = new Mobile();
m1.name = "Iphone11";
Mobile m2 = new Mobile();
m2 = "Iphone12";
m1.system = "IOS";
System.out.println(m2.system); // IOS
m2.system = "Android";
System.out.println(m1.system); // Android
}
}
class Mobile {
String name;
static String system;
}
上面的例子可以看到:
Mobile
類將system
印出null
,因為沒有替Static
中的靜態屬性
system
賦值,所以他會是引用類型的初始化
值
null
,因為靜態屬性
是在類
加載時就已經會先加載,而一般非靜態屬性的屬性是在實例化
時才進行加載。m1
將system
賦成Iphone
時,印出m2
的system
也會是同樣值IOS
。m2
將將system
賦成Android
時,印出m1
的system
也會是同樣值Android
。在JDK7
以前,靜態屬性
存放的位置會是在Method Area(方法區)
中,但是從JDK8
後開始,都將靜態屬性
放在Heap
內,與一般的物件放的位置相同。
使用static
修飾的靜態方法
中不能使用
this
和super
,因為這兩個關鍵字
所指的都是當前物件
,但是static
指的是當前類
,在裡面使用靜態屬性
時,所省略的是類名.
,而不是省略this.
。
一般在開發中會將屬性宣告為靜態:
PI
。一般在開發中會將方法宣告為靜態:
靜態屬性
。類
適用於當作工具使用時。例如Arrays
、Math
中的方法都是屬於靜態方法
。