天天看點

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).定義類方法;