Java散列知識點

父類的靜態方法能否被子類重寫,爲什麼?
  • 靜態方法只與類相關,不與具體實現相關;
  • static方法在編譯時期就綁定了,所有引用到該方法的對象所指向的都是同一塊內存中的數據,也就是該靜態方法;
  • 父類的靜態方法不能被子類繼承,更談不上重寫。
接口回調實現過程:
  • 定義一個回調函數,給事件發送方傳入接口,在需要的地方調用未實現方法;在事件接收方實例化接口並處理結果;
  • 在事件發生時,會通知回調函數進行處理。
泛型原理:
  • Java的泛型是僞泛型;
  • 使用泛型的時候加上的類型參數,會在編譯器在編譯的時候去掉,這個過程叫做類型擦除;
  • 泛型只在編譯期有效,所以泛型類與普通類在Java虛擬機內沒有任何區別。
反射中,Class.forNameclassloader的區別:
  • 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只能包含對象類型,如果要存基本數據類型,也要用它們的包裝類才能通過。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章