final 關(guān)鍵字主要用在三個地方:
對于 final 變量,如果是基本數(shù)據(jù)類型霍比,則其數(shù)值在初始化后便不能更改;如果是引用類型暴备,對其進(jìn)行初始化后悠瞬,便不能再指向另一個對象;
用 final 修飾類涯捻,表明這個類不能被繼承浅妆,此時類中的所有成員方法,都會被隱式地指定為 final 方法障癌;
使用 final 方法的原因有兩個凌外。第一個原因是把方法鎖定,防止任何繼承類修改它的含義涛浙;第二個原因是效率康辑,早期的 Java 版本中,會將 final 方法轉(zhuǎn)為內(nèi)嵌調(diào)用轿亮,但是如果方法過于龐大疮薇,可能看不到內(nèi)嵌調(diào)用帶來的任何性能提升(如今已經(jīng)不需要顯示使用 final 方法來進(jìn)行這些優(yōu)化,類中所有的 private 方法會隱式地指定為 final)我注。
static 關(guān)鍵字主要有以下四種使用場景:
修飾成員變量和成員方法: 被 static 修飾的成員屬于類按咒,不屬于這個類的某個對象,被類中所有的對象共享但骨,可以并且建議通過類名進(jìn)行調(diào)用励七。被 static 聲明的成員變量屬于靜態(tài)成員變量智袭,靜態(tài)變量存放在 Java 內(nèi)存區(qū)域的方法區(qū),調(diào)用格式:
類名.靜態(tài)變量名
掠抬、類名.靜態(tài)方法名()
补履;靜態(tài)代碼塊: 靜態(tài)代碼塊定義在類中方法外, 靜態(tài)代碼塊在非靜態(tài)代碼塊之前執(zhí)行(靜態(tài)代碼塊—>非靜態(tài)代碼塊—>構(gòu)造方法),當(dāng)前類不管創(chuàng)建多少對象剿另,靜態(tài)代碼塊都只執(zhí)行一次箫锤;
靜態(tài)內(nèi)部類( static 修飾類的話只能修飾內(nèi)部類): 靜態(tài)內(nèi)部類與非靜態(tài)內(nèi)部類之間存在一個最大的區(qū)別: 非靜態(tài)內(nèi)部類在編譯完成之后,會隱含地保存著一個引用雨女,該引用指向創(chuàng)建它的外圍類谚攒;但是靜態(tài)內(nèi)部類卻沒有,這意味著:1. 它的創(chuàng)建不需要依賴外圍類的創(chuàng)建氛堕;2. 它不能使用任何外圍類的非static成員變量和方法馏臭;
靜態(tài)導(dǎo)包(用來導(dǎo)入類中的靜態(tài)資源): 格式為:
import static xxx
,可以導(dǎo)入某個類中的指定靜態(tài)資源讼稚,并且不需要顯式使用類名來調(diào)用類中的靜態(tài)成員和靜態(tài)方法括儒。