父類的靜態方法能否被子類重寫,爲什麼?
- 靜態方法只與類相關,不與具體實現相關;
- static方法在編譯時期就綁定了,所有引用到該方法的對象所指向的都是同一塊內存中的數據,也就是該靜態方法;
- 父類的靜態方法不能被子類繼承,更談不上重寫。
接口回調實現過程:
- 定義一個回調函數,給事件發送方傳入接口,在需要的地方調用未實現方法;在事件接收方實例化接口並處理結果;
- 在事件發生時,會通知回調函數進行處理。
泛型原理:
- Java的泛型是僞泛型;
- 使用泛型的時候加上的類型參數,會在編譯器在編譯的時候去掉,這個過程叫做類型擦除;
- 泛型只在編譯期有效,所以泛型類與普通類在Java虛擬機內沒有任何區別。
反射中,Class.forName
和classloader
的區別:
Class.forName()
前者除了將類的.class
文件加載到jvm中之外,還會對類進行解釋,執行類中的static塊;classLoader
只幹一件事情,就是將.class
文件加載到JVM中,不會執行static中的內容。
throw和throws的比較
- throws出現在方法聲明上,表示出現異常的一種可能性,並不一定發生異常,用throws聲明的方法表示此方法不處理異常,由系統自動捕獲的異常信息拋給上級調用方法,主方法拋出的異常,由JVM處理;
- throw出現在方法體內,執行throw則一定拋出了某種異常,用戶自己進行異常類對象的實例化操作,,手動拋出異常。
爲什麼Java被稱作是“平臺無關的編程語言”?
- Java虛擬機有自己完善的硬體架構,如:處理器、堆棧、寄存器等,還具有相應的指令系統;JVM屏蔽了與具體操作系統平臺相關的信息,使得Java程序只需要生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平臺上不加修改的運行。
JDK和JRE的區別是什麼?
- JRE(Java Runtime Environment縮寫,指Java運行環境)包括java虛擬機和applet;
- JDK(Java Development Kit的縮寫,指Java開發工具包)包括JRE和編譯器等;可以開發、編譯執行Java程序。
爲什麼內部類調用的外部變量必須是final修飾的?
- 方法中的局部變量,方法結束後這個變量就要釋放掉,然而內部類的某個方法還沒有釋放完,這個時候它所引用的外部變量已經找不到了;
- 如果定義爲final,Java會將這個變量複製一份作爲成員變量內置於內部類中;
- 爲了解決:局部變量的生命週期與局部類的對象的聲明週期的不一致性問題。
迭代器可以在迭代的過程中刪除底層集合的元素,但是不可以調用集合的remove(Object obj)
刪除,可以通過迭代器的remove()
方法刪除
- Array可以包含基本類型和對象類型;
- ArrayList只能包含對象類型,如果要存基本數據類型,也要用它們的包裝類才能通過。