轉載於:http://blog.csdn.net/ZJDWHD/article/details/52441298
其他的就不想再貼過來了,就只寫一下自己覺得重要的,詳細的請去上面鏈接看。
7. final關鍵字
根據上下文環境,關鍵字final的含義存在着細微的差別,但通常它指的是“這是無法改變的。”不想做改變可能處於兩種原因:設計或效率。由於這兩個原因相差很遠,所以關鍵字final可能會被誤用。可能使用final的三種情況:數據、方法、類。
1.數據:數據不可更改
2.方法:方法不可覆蓋
3.類:類不可繼承,沒有子類
8.含有繼承的初始化
看一下代碼,好好琢磨一下:
class Insect {
private int i = 9;
protected int j;
Insect() {
print("i = " + i + ", j = " + j);
j = 39;
}
private static int x1 =
printInit("static Insect.x1 initialized");
static int printInit(String s) {
print(s);
return 47;
}
}
public class Beetle extends Insect {
private int k = printInit("Beetle.k initialized");
public Beetle() {
print("k = " + k);
print("j = " + j);
}
private static int x2 =
printInit("static Beetle.x2 initialized");
public static void main(String[] args) {
print("Beetle constructor");
Beetle b = new Beetle();
}
}
/**
* static Insect.x1 initialized
* static Beetle.x2 initialized
* Beetle constructor
* i = 9, j = 0
* Beetle.k initialized
* k = 47
* j = 39
*/
重要:初始化順序:父類static變量 - 子類static變量(因爲子類的初始化可能依賴於基類是否被正確初始化),然後按照main函數中的聲明來初始化,若沒有創建子類對象,則不會執行構造函數。可結合上面的樣例代碼來理解。