iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0

宣告類時,若是在屬性或方法前面加上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;
	
}

上面的例子可以看到:

  1. 一開始就可以從Mobile 類將system印出null ,因為沒有替Static 中的靜態屬性 system 賦值,所以他會是引用類型的初始化 值 null ,因為靜態屬性是在類 加載時就已經會先加載,而一般非靜態屬性的屬性是在實例化 時才進行加載。
  2. 當透過m1 將system 賦成Iphone 時,印出m2 的system 也會是同樣值IOS 。
  3. 當透過m2 將將system 賦成Android 時,印出m1 的system 也會是同樣值Android 。

在JDK7 以前,靜態屬性 存放的位置會是在Method Area(方法區) 中,但是從JDK8 後開始,都將靜態屬性放在Heap 內,與一般的物件放的位置相同。

使用static 修飾的靜態方法 中不能使用 this 和super ,因為這兩個關鍵字 所指的都是當前物件 ,但是static 指的是當前類 ,在裡面使用靜態屬性 時,所省略的是類名. ,而不是省略this. 。

一般在開發中會將屬性宣告為靜態:

  • 多個物件共享同一個屬性,且這個屬性的值是相同的。
  • 這個屬性的值屬於常量。例如數學中的PI。

一般在開發中會將方法宣告為靜態:

  • 方法中所使用的屬性都是屬於靜態屬性。
  • 類 適用於當作工具使用時。例如Arrays 、Math 中的方法都是屬於靜態方法。

上一篇
Day20-Object & 4方法
下一篇
Day22-單例模式、初始化區塊
系列文
前端工程師的java學習紀錄 共 41 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言