Java編程思想—第三四五六七章

1、對象引用

若兩個對象進行賦值操作,d1=d2,此時若操作d1或者d2,都會改變,即此時兩個對象指向同一個堆對象。若想只改變值,可d1.v=d2.v。

2、短路

即一旦確定一個式子的正誤,式子後面部分就不在運算,例:a&&b 若a爲假  則整個式子都爲假 b就不再運算。

3、垃圾回收方法

(1)引用計數法

每個對象都有一個引用計數器,當引用計數器爲0時,回收,但存在循環引用,本該回收引用值卻不爲0,算法不好。

(2)停止-複製

對於任何活着的對象,一定追溯到其存活在堆棧或者靜態存儲區的引用,因此需要遍歷所有引用。效率低,因爲需要在多個大塊存儲區之間來回讀存。若程序進入穩定狀態,產生很少垃圾,但此法還是要進行復制,造成資源浪費。

(3)標記-清掃

遍歷所有引用,找出存活的對象,若還存活就標記,這一過程不會回收對象,全部標記工作完成時候纔會進行清理操作。在清理過程中沒有被標記的對象會被釋放。不會產生複製動作,

4、初始化順序

靜態變量(塊)->非靜態變量(塊)->構造函數->普通函數。且靜態變量(靜態new對象)僅會被初始化一次。在首次生成這個類的一個對象或者首次訪問屬於哪個類的靜態數據成員時(及時從未生成過那個類的對象)。

5、static、final、static final區別

final:

final可以修飾:屬性,方法,類,局部變量(方法中的變量)

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

final修飾的屬性跟具體對象有關,在運行期初始化的final屬性,不同對象可以有不同的值。

final修飾的屬性表明是一個常數(創建後不能被修改,可以未初始化,0 false null等)。

final修飾的方法表示該方法在子類中不能被重寫,final修飾的類表示該類不能被繼承。

final可以在傳參時聲明參數是final類型的。如void add(final int a)。

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

static:

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

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

static修飾的屬性所有對象都只有一個值。

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對象的情況下調用

 

類中所有private 隱式被指定爲final 因爲無法被更改。同樣final修飾的類 無法被繼承,內部所有方法隱式爲final 無法被覆寫。

6、類的加載

類是在創建它的第一個對象時才被加載的,但訪問static域或對象時也會發生加載。static的東西只會被初始化一次。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章