前兩篇文章介紹了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