代表最終不可變的。
用法:
1、用來修飾乙個類:不能有子類,所以其中所有的方法都不嗯呢該被覆蓋重寫。
2、用來修飾乙個方法:方法不能被覆蓋重寫。
3、用來修飾乙個區域性變數(variable):一次賦值,終生不變。
4、用來修飾乙個成員變數:一次賦值,終生不變。沒有預設值需要手動賦值。
final
修飾的類又叫「太監類」。
final關鍵字
和abstract關鍵字
衝突,不能同時是使用。
格式:
public final class 類名
final用來修飾乙個區域性變數,那這個區域性變數,一次賦值終生不變。
final
int numb = 15;
system.out。println(numb);// 15
注意:
final修飾引用型別的資料,位址值不可變,但是通過位址修改內部的內容是可以的。
final修飾基本型別,一次賦值,終生不變。
final用來修飾乙個成員變數,也是一次賦值,終生不變。
成員變數本來是預設值的。一旦final修飾了成員變數,那麼將不再具有預設值。
成員變數賦值:
1、直接定義的時候賦值。
2、通過構造方法賦值。
final
int numb = 15;
system.out.println(numb); // 15
// numb = 20; // 錯誤寫法!
// numb = 15; // 錯誤寫法!
final
int numc;
numc = 25; // 分成兩步,是正確寫法!
system.out.println(numc); // 25
system.out.println("**********====");
final
int array = ; // 位址值不可變
system.out.println(arrays.tostring(array)); // [10, 20, 30]
array[1] = 25;
system.out.println(arrays.tostring(array)); // [10, 25, 30]
public > protected > (default) > private
同乙個類(自己) yes
yesyes
yes同乙個包(鄰居) yes
yesyes
no不同包子類(兒子) yes
yesno
no不同包非子類(陌生人) yes
nono
no
注意事項:
1. (default)並不是關鍵字default,而是什麼都不寫。
2、只要不是相同的包都需要導包。
概念:在一類的裡面再定義乙個類,裡面的類就叫做內部類。
內部類的分類:
1、成員內部類
2、區域性內部類(包含匿名內部類)
成員內部類的定義格式:
修飾符 class 類名稱
}
使用 :
1、間接使用:在外部類的成員方法中,建立乙個內部類的物件。直觀呼叫外部類物件的外部成員方法即可。
2、直接使用:直接使用內部類物件,公示:
// 外部類.內部類 物件名 = new 外部類().new 內部類();
outer.inner obj = new outer().new inner();
obj.methodinner();
備註 :
1、外部類和內部類仍然可以繼續定義成員變數、成員方法、而且用本類當中的東西,仍然是隨便用。
2、內部類如果訪問外部類的內容,可以隨意。
3、外部類訪問內部類的內容,必須有乙個內部類的物件才行。
4、編譯生成的.class檔名稱為「外部類$內部類.class
」
內部類訪問外部類的成員變數:
外部類名.this.成員變數名;
成員內部類:定義在外部類內,在方法外
區域性內部類:外部類的成員方法內,只有本方法內才有用。(一定要定義區域性內部類,然後才能使用。)
成員內部類的許可權修飾符:
1、外部類:public
、(default
)
2、成員內部類:public
、protected
、(default
)、privete
3、區域性內部類:什麼都不能寫,而且這並不是(default
)方法。
區域性內部類訪問所在的方法的區域性變數,那麼這個變數一定需要是有效的final才行。
因為區域性變數和內部累建立的物件生命週期不同。
匿名內部類
介面名稱 物件名 = new 介面名稱();
解析:
new:建立物件
右側的介面名稱:匿名內部類所實現的介面名。
右側的:匿名內部類。
public
class demomain
};obj2.method();
// 既是匿名物件,也是匿名內部類
new myinte***ce()
}.method();
}}
匿名物件類的好處:省去了單獨定義乙個實現類的麻煩。
anonymous匿名內部類
1、匿名內部類的使用前提:必須有繼承或者介面實現關係。
2、匿名內部類可以使用介面,也可以使用抽象類,也可以使用普通的類。只要不是final的,就可以。
3、匿名內部類(區域性內部類)編譯之後因為沒有名字,所以產生的位元組碼檔案是「外部類名稱$1.class
」。
介面作為成員變數的型別。
介面作為方法的返回值。
public
class body
public
class heart
public
void
beat()
}}
測試類:
// 通過body間接使用heart
body
body = new
body(); // 建立了外部類物件
body.methodouter();
// 直接使用heart內部類物件
body.heart heart = new
body().new heart();
heart.beat();
heart.methodinner(); // 10
final 許可權 內部類 引用型別
final 不可改變。可以用於修飾類 方法和變數。final運用方面 1 修飾變數 基本型別的區域性變數,被final修飾後,只能賦值一次,不能再更改。2 區域性變數 引用型別 引用型別的區域性變數,被final修飾後,只能指向乙個物件,位址不能再更改。但是不影響物件內部的成員變數值的修改。3 成員...
11 final 許可權 內部類
final類不能有子類,但可以有父類 final類不能有abstract方法 修飾方法時,final和abstract不能同時出現 fina修飾變數時 內部類分為 成員內部類 區域性內部類。包含內部類的類在被編譯時會生成兩個位元組碼檔案 外部類名 內部類名.calss 和 外部類名.calss 內部...
Day16 final 許可權 內部類
許可權修飾符 編寫 時,如果沒有特殊的考慮,建議這樣使用許可權 內部類 內用外,隨意訪問 外用內,需要內部類物件。成員內部類 定義在類中方法外的類。區域性內部類 定義在類中的方法內。匿名內部類 實現類或子類只需使用一次,就可以使用 匿名內部類 內部類public class innerclass c...