static、final、static final的區別

final:

    final能夠修飾屬性,方法,類,局部變量(方法中的變量)數組

    final修飾的屬性的初始化能夠在編譯期,也能夠在運行期,初始化後不能被改變。post

    final修飾的屬性跟具體對象有關,在運行期初始化的final屬性,不一樣對象能夠有不一樣的值。this

    final修飾的屬性代表是一個常數(建立後不能被修改)。指針

    final修飾的方法表示該方法在子類中不能被重寫;對象

    final修飾的類表示該類不能被繼承。blog

    對於基本類型數據,final會將值變爲一個常數(建立後不能被修改);可是對於對象句柄(亦可稱做引用或者指針),final會將句柄變爲一個常數(進行聲明時,必須將句柄初始化到一個具體的對象。並且不能再將句柄指向另外一個對象。可是,對象的自己是能夠修改的。這一限制也適用於數組,數組也屬於對象,數組自己也是能夠修改的。方法參數中的final句柄,意味着在該方法內部,咱們不能改變參數句柄指向的實際東西,也就是說在方法內部不能給形參句柄再另外賦值)。繼承


 

static:

    static能夠修飾:屬性,方法,代碼段,內部類(靜態內部類或嵌套內部類)it

    static修飾的屬性的初始化在編譯期(類加載的時候),初始化後能改變。編譯

    static修飾的屬性全部對象都只有一個值。class

    static修飾的屬性強調它們只有一個。

    static修飾的屬性、方法、代碼段跟該類的具體對象無關,不建立對象也能調用static修飾的屬性、方法等

    static和「this、super」水火不相容,static跟具體對象無關,而this、super正好跟具體對象有關。

    static不能夠修飾局部變量。


 

static final和final static:

    static final和final static語法和用法上沒有任何區別,通常習慣static寫在前面。

static final:

    static修飾的屬性強調它們只有一個,final修飾的屬性代表是一個常數(建立後不能被修改)。static final修飾的屬性表示一旦給值,就不可修改,而且能夠經過類名訪問。

    static final也能夠修飾方法,表示該方法不能重寫,能夠在不new對象的狀況下調用。


 

靜態變量和實例變量的區別?   

在語法定義上的區別:靜態變量前要加static關鍵字,而實例變量前不加。

在程序運行時的區別:實例變量屬於某個對象的屬性,必須建立了實例對象,其中的實例變量纔會被分配空間,才能使用這個實例變量。靜態變量不屬於某個實例對象,而是屬於類,因此也稱爲類變量,只要程序加載了類的字節碼文件,不用建立任何實例象,靜態變量就會被分配空間,靜態變量就能夠被使用了。 總之,實例變量必須建立對象後才能夠經過這個對象來使用,靜態變量則能夠直接使用類名來引用。

是否能夠從一個static方法內部發出對非static方法的調用?

不能夠。由於非static方法要與對象關聯在一塊兒,必須建立一個對象後,才能夠在該對象上進行方法的調用,而static方法調用時不須要建立對象,能夠直接調用。也就是說,一個static方法被調用時,可能尚未建立任何實例對象,因此,一個static方法內部不能夠發出對非static方法的調用。

相關文章
相關標籤/搜索