第四章:
1、PRimitive類型的重載慎用。
(chap4、P7)
2、返回值不能重載,因為存在雖然方法有返回值,但程序中并不關注返回值的情況,如:
定義:int f(){}; String f(){};
調用 f(),此時虛擬機就不知道該調用哪個f了。
(chap4、P11)
3、類中的普通方法不能調用構造函數,構造函數能相互調用,但只能用this要害字。
(chap4、P13)
4、一般來說,類中無需使用finalize(),因為虛擬機會自動進行垃圾清理,但有種非凡情況,聲明了一個對象,但并沒有refrence,比如:
class Aclass(){....};
...
new Aclass();
因為沒有refrence,那么虛擬機會認為它已經沒有用了,就可以回收了,但此時假如你不希望它回收,那么可以在finalize函數中實現,具體可參考書本的例子。
(chap4、P16)
5、內部變量在使用之前必須初始化;所謂“使用”是指出現在表達式右邊、方法的參數等,而不是表達式的左邊,例如:
String s = "i love java";
int i;
i = s.length();
是正確的;而
int i;
i++;
是錯誤的。因為i++相對于i = i + 1
但是,假如不是內部變量而是類的的成員數據,則不需要初始化,因為編譯器不知道會在哪個方法中被初始化。對于primitive的成員數據,Java會自動賦予初始值,如:
boolean = false
char = (char)0 ----空格
byte = 0
int = 0
long = 0
float = 0
double = 0
對于對象的成員數據,沒有初始化之前等于null,所以,primitive的成員數據沒有初始化之前被使用并不會發生錯誤,但對象數據在運行時就會發生exception。
有一種非凡情況,如:
int [] a = new int[4];
此時,看上去只初始化了數組的大小而沒有初始化數組的成員,但在java中,這也是沒有問題的,java給每個數組成員自動進行了初始化。
(chap4,P22)
6、類實例化的時候總是先執行成員數據的定義(假如在定義的時候進行初始化的話此時就初始化了),然后再執行構造函數,而不管在代碼順序上成員數據在前還是構造函數在前。
(chap4,P26)
7、對于static類型的成員變量,static類型的成員變量總是比其他成員變量先初始化,static類型的成員變量只初始化一次,只有被用到的static成員變量才會被初始化。
此處,“被用到”在我來理解,是從main函數開始檢查的,假如main函數中定義了靜態變量或者被main函數調用的其他類中定義了靜態變量,這些靜態變量就“被用到”了。
(chap4,P27)
8、primitive類型的數組可以用new來初始化,如int[] a = new int[]{1,2,3,4},也可以直接用形如int[] a = {1,2,3,4}的方式來初始化,但假如不是primitive的變量就只能用new來初始化。
(chap4,P34)
9、數組初始化的時候,int[] a = {1,2,3,4,}; 4后面有逗號,對不對?答:對,最后的逗號有與沒有都可以。
(chap4,P35)
新聞熱點
疑難解答