全部被 final 修飾的量都是常量 也就是該量的值是不變的
,用static主要做用是在類剛加載時就初始化該量的值並給他分配一塊共用的內存塊存儲他的值.
至於static 定義的類有什麼做用集自網絡比較容易你理解(以下),你也能夠百度 static 定義的類 就能獲得你要的答案
Java裏面static通常用來修飾成員變量或函數。但有一種特殊用法是用static修飾內部類,普通類是不容許聲明爲靜態的,只有內部類才能夠。被static修飾的內部類能夠直接做爲一個普通類來使用,而不需實例一個外部類
爲何接口要規定成員變量必須是public static final的呢?
答: 首先接口是一種高度抽象的"模版",,而接口中的屬性也就是’模版’的成員,就應當是全部實現"模版"的實現類的共有特性,因此它是public 的 ,是全部實現類共有的 .不然具體實現類不能使用該變量,則就沒有了定義的意義。 static的緣由是,假如能夠是非static的話,因一個類能夠繼承多個接口,出現重名的變量,如何區分呢?因此必須定義成static的,以便區分。 例如一個類實現了兩個不一樣的接口,這兩個接口中有相同名字的變量定義,示例代碼以下: public class MultiInmpl implements InTF, InTFOther{ /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub MultiInmpl m = new MultiInmpl(); //若是實現的接口中有同名的變量,則不能引用 System.out.println(m.str);//str在2個接口中都有定義 } } 以上代碼編譯錯誤!!! Multiple markers at this line - The field m.str is ambiguous - Line breakpoint:MultiInmpl [line: 11] - main(String[]) 其次,接口中若是可能定義非final的變量的話,而方法又都是abstract的,這就自相矛盾了,有可變成員變量但對應的方法卻沒法操做這些變量,雖然能夠直接修改這些靜態成員變量的值,但全部實現類對應的值都被修改了,這跟抽象類有何區別? 又接口是一種更高層面的抽象,是一種規範、功能定義的聲明,全部可變的東西都應該歸屬到實現類中,這樣接口才能起到標準化、規範化的做用。因此接口中的屬性必然是final的。 最後,接口只是對事物的屬性和行爲更高層次的抽象 。對修改關閉,對擴展(不一樣的實現implements)開放,接口是對開閉原則(Open-Closed Principle )的一種體現。