天天看點

Java關鍵字(六)final與static

前兩篇文章介紹了final和static的使用,下面總結一下他們兩個作用。

以下是網絡上的總結,解釋的很詳細:

static可以修飾代碼塊和變量,而final可以修飾變量和類。

static 表示靜态的,從始至終隻獲得一塊記憶體空間。而且這塊空間的資源還具有“全局性”,就是說所有的成員都可以無條件引用;

另外,static修飾的不用程式調用,隻要該類被執行,static修飾的也被執行。如最常見的,Public static void main(){};又如 static int a;那麼所有的成員都可以引用a。

final 表示最終的,它修飾的類不能有子類。它修飾的變量是不可變的常數,是以final的變量要立刻指派。如:class final A {}類A就不能被别的類繼承;final String a=“abc”;那麼a永遠隻能是abc。fianl static String a=“abc”;那麼a不但是一個常數,還是一個全局常數。

static如果用這個修飾你女朋友就意味着你女朋友是所有人的女朋友。

final如果用這個修飾你女朋友那就是意味着她已經變成你老婆了,你甩不掉了。隻給你一次初始化機會。

為什麼接口中的常量必須使用public static final修飾

public: 使接口的實作類可以使用這個常量

static:static修飾就表示它屬于類的,随的類的加載而存在的,如果是非static的話,

    就表示屬于對象的,隻有建立對象時才有它,而接口是不能建立對象的,是以

    接口的常量必須定義為static

final:final修飾就是保證接口定義的常量不能被實作類去修改,如果沒有final的話,

    由子類随意去修改的話,接口建立這個常量就沒有意義了。

最後看一個運作執行個體:

public class Demo03 {
	public static void main(String[] args) {
		MyClass myClass1 = new MyClass();
		MyClass myClass2 = new MyClass();
		System.out.println("final聲明的随機數:"+myClass1.i);
        System.out.println("static聲明的随機數:"+myClass1.j);
        System.out.println("再次調用final聲明的随機數:"+myClass2.i);
        System.out.println("再次調用static聲明的随機數:"+myClass2.j);
	}
}
class MyClass {
    public final double i = Math.random();
    public static double j = Math.random();
}
           

運作結果:

final聲明的随機數:0.9639843050925515
static聲明的随機數:0.9900959701661931
再次調用final聲明的随機數:0.6144552229158678
再次調用static聲明的随機數:0.9900959701661931