static修飾類 及final與static用法總結


我們都習慣了static修飾內部變量或者內部方法,這樣的用法 大家很熟悉了,在這裏就不再累述,這裏主要講述static修飾類。

普通類是不允許聲明爲靜態的,只有內部類纔可以。被static修飾的內部類可以直接作爲一個普通類來使用,而不需實例一個外部類(見如下代碼

public class OuterClass {
	public static class InnerClass{
		InnerClass(){
			System.out.println("============= static 內部類  InnerClass =============");
		}
	}
}

現在使用內部類

public class TestStaticClass {
	public static void main(String[] args) {
		// 不需要new一個OutClass
		new OuterClass.InnerClass();
	}
}

是不是感覺沒有什麼不同?其實不然,我們不需要先實例化外部類,然後通過外部類對象再實例化內部類。這樣說可能不是明白。貼代碼先

package inner_class;

public class OuterClass {
	public class InnerClass{
		InnerClass(){
			System.out.println("============= 非static 內部類'InnerClass' =============");
		}
	}
}

現在使用內部類

public class TestStaticClass {
	public static void main(String[] args) {
		// OutClass需要先生成一個實例
		OuterClass oc = new OuterClass();
		oc.new InnerClass();
	}
}
看到區別了吧。static修飾類的時候只能是內部類。


static經常與final在一起使用。現在看一下他們用法上的區別。


  final static
修飾類 該類不可被繼承 只能修飾內部類,該類不需要new,是靜態加載(嵌套頂層類)
修飾接口 × ×
修飾構造函數 × ×
修飾語句塊 × 虛擬機按聲明順序初始化static成員字段和static語句塊
修飾字段屬性 表示屬性初始化後不能修改(實例常量) 是類變量,所有實例共享該變量值(類變量)
在定義時或構造函數中賦值(每個實例擁有一份拷貝)
修飾方法 該方法不能被覆蓋(只可繼承) 是類方法,所有實例共享該方法(類方法)
修飾函數參數 參數值不能被函數修改 ×
修飾函數局部變量 局部變量初始化後不能修改(局部常量) ×
     
用途 1).爲了防止方法被覆蓋或改寫; 1).定義全局變量或常量;
2).提高運行效率,JAVA對final方法調用採用內嵌機制; 2).定義類方法;



發佈了44 篇原創文章 · 獲贊 14 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章