Java併發系列六 深入了解final關鍵字

2021-08-21 06:19:49 字數 1938 閱讀 8574

必須要在靜態初始化塊中指定初始值或者宣告該類變數時指定初始值,而且只能在這兩個地方之一進行指定;

必要要在非靜態初始化塊,宣告該例項變數或者在構造器中指定初始值,而且只能在這三個地方進行指定。

public

class

finalexample

static

class

person

@override

public string tostring

()';}}

}

在定義該final變數時就指定了初始值;

該初始值在編譯時就能夠唯一指定。

public

class

finalexampleparent

}

public

class

finalexampleparent

public

final

void

test

(string str)

}

public

final

class

finalexampleparent

}

提供帶參的構造器用於初始化類的成員變數;

僅為該類的成員變數提供getter方法,不提供setter方法,因為普通方法無法修改fina修飾的成員變數;

如果有必要就重寫object類 的hashcode()和equals()方法,應該保證用equals()判斷相同的兩個物件其hashcode值也是相等的。

/** the value is used for character storage. */

private final char

value;

public

class

finaldemo

public

static

void

writer

()public

static

void

reader

()}

編譯器會在final域寫之後,建構函式return之前,插入乙個storestore屏障(關於記憶體屏障可以看上篇文章)。這個屏障可以禁止處理器把final域的寫,重排序到建構函式之外。

把這個物件賦值給成員變數finaldemo。

初次讀引用變數finaldemo的普通域a;

初次讀引用變數finaldemo的final域b;

public

class

finalreferencedemo

public

void

writerone

()public

void

writertwo

()public

void

reader()}

}

禁止final域寫與構造方法重排序,即禁止final域寫重排序到構造方法之外,從而保證該物件對所有執行緒可見時,該物件的final域全部已經初始化過。

禁止初次讀物件的引用與讀該物件包含的final域的重排序。

禁止在建構函式對乙個final修飾的物件的成員域的寫入與隨後將這個被構造的物件的引用賦值給引用變數 重排序

public

class

finalreferenceescapedemo

public

void

writer

()public

void

reader()}

}

Redis (六 深入了解redis核心)

記憶體淘汰 redis記憶體不足時,有兩種處理方式 1 啟用虛擬記憶體 將vm enabled設定為yes 2 啟用記憶體淘汰 將maxmemory設定為乙個大於0的整數 redis的使用記憶體大於最大分配可用記憶體時,開始進行淘汰,memcache只有lru演算法,redis有 1 隨機淘汰 從資...

spark系列5 深入了解RDD

目標 深入理解 rdd 的內在邏輯,以及 rdd 的內部屬性 rdd 由什麼組成 需求val sc new sparkcontext config val result sc.textfile dataset access log sample.txt map item item.split 0 1...

java中的構造方法的深入了解

很長時間對與構造方法沒有很深的認識,但看過一篇介紹他的文章後感覺恍然大悟,故而把文章整理了一下收藏至此。類的繼承機制使得子類可以使用父類的功能 即 並且子類也具有父類的型別。下面 介紹類在繼承關係上的初始化的順序問題。示例1 class superclass public class subclas...