1、即使一個類只有包訪問權限,其public main()仍然是可訪問的
2、java會自動在導出類(子類)的構造器中插入對基類構造器的調用
3、如果基類有默認構造器,則導出類會在初始化時自動先調用基類構造器,再調用自己的構造器。單如果基類含有帶參數的構造器,就不會有默認構造器了,那么子類就不可能默認的知道要調用哪個構造器,并且也不知道該自動傳遞什么樣的參數進去,因此這種情況下需要手工通過super關鍵字調用基類的構造器。導出類構造器中第一件要做的事情就是調用基類構造器(沒有默認基類構造器的情況下),否則編譯器將會報錯
4、@orerride關鍵字可以防止你在不想重載夫類方法的情況下意外的重載了父類的方法
5、is-a的關系用繼承來表達,而has-a的關系用組合來表達
6、import引入類,import static引入類中的靜態方法(包括所有重名的方法)
7、在需要基類的地方傳入導出類,導出類自動的轉換成了基類,這種情況稱為向上轉型
8、到底是該使用組合還是繼承,一個最清晰的判斷方法就是問一問自己是否需要從導出類向基類向上轉型,如果必須向上轉型,則繼承是有必要的,否則需要慎用繼承
9、final修飾的常量如果是基本數據類型,則該常量數值不變,如果修飾的是一個引用,則該引用一旦指定了對象以后不能再指定別的對象,常量可以被編譯器在編譯時執行計算式,可以減輕運行時負擔
10、我們不能因為某數據是final的就認為可以在編譯期可以知道他的值,事實上,這個值同樣可以用隨機函數生成,只不過一旦生成以后就不能再改變了
public static final int INT_5 = rand.nextInt(20);
11、java運行生成空白final,聲明final單又未給定初始值,無論什么情況,編譯器都確保空白final在使用前必須被初始化
12、必須在域定義處或者構造器中對final域進行初始化,否則編譯器報錯,這正是編譯器確保空白final在使用前必須被初始化的原因
13、java允許在參數列表中以聲明的方式將參數指明為final,這意味著你無法在方法中更改參數引用所指向的對象,這一特性主要用于向匿名內部類傳遞參數
14、使用final方法(method)的原因有兩個,第一個是把方法鎖定,以防止任何繼承類修改他的含義,不能被覆蓋,第二個原因是效率。
15、final和PRivate關鍵字,類中所有的private方法都隱式的指定為final的,由于無法取用private方法,所以就無法覆蓋它,雖然可以對private方法添加final修飾詞,但毫無意義。
16、finla類,當將某個類的整體定義為final時,就表明了不打算繼承該類,而且也不允許別人這么做。final類中的所有方法都隱式的指定為final,因為無法覆蓋他們,可以在final
類中給方法添加修飾詞final,這同樣也毫無意義
17、java類的加載發生于創建類的第一個對象之時,當時當訪問static域或者方法時,也會發生加載
18、加載一個類時,類中的所有static域都會按照書寫順序依次加載
19、類中無論是成員變量還是方法中的變量的初始化過程,都在調用構造函數之前發生
新聞熱點
疑難解答