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