1. 程式人生 > >Java 核心技術筆記1

Java 核心技術筆記1


物件

  • 所有物件儲存在堆中,物件名只是一個引用;
  • 一般訪問器中不返回引用的物件,需要時可進行克隆,Object的clone的方法
  • Java方法總是值引用的,物件也只傳遞其引用的拷貝值;
  • Java只有單繼承,其中子類物件就是父類物件,可以用子類初始化父類,反過來需要強制轉化,但一般不可用。
  • 每個物件都有一個雜湊碼,String物件的雜湊碼是基於內容的——即內容一致時其雜湊碼一致;其他的則是由Object物件匯出的隨機hash值;雜湊碼即為物件的儲存地址,重新定義equals方法後必須重新定義hashcode方法;
  • equals函式:①引數是Object型別的一個other,可以重寫object的;②判斷是否是同一物件;③判斷other是否是null;④判斷是不是同屬一個類,getClass或instanceof;⑤將other轉化為當前類;⑥進行實域的比較;子類重寫時要呼叫父類的equals
  • 自動裝箱和拆箱之間,基本型別有一個比較小的範圍,如int是±128;裝箱和拆箱是編譯器認可的,與虛擬機器無關;Integer、Float等這些基本型別類是final的,其值不可更改;
  • 引數數量可變的方法:引數型別… 引數名,如function(double... args)
  • 列舉中比較兩個型別是否相等時,只需直接“==”即可比較,不需要用equals;列舉類中的ordinal方法返回列舉值的位置

反射

動態編寫Java程式,多應用與JavaBeans中;將能夠分析類能力的程式稱為反射reflective。作用:①在執行中分析類的能力;②在執行中檢視物件,如編寫toString方法供所有類使用;③實現通用陣列操作程式碼;④利用Method物件,類似 與C++中的函式指標。一般是工具構造者使用

  • Class類:程式執行期間,Java執行系統始終為所有的物件維護一個執行時的型別標識;這個資訊跟蹤著每個物件所屬的類,這些資訊儲存在Class中。
  • A.getClass().newInstance():構造一個同類物件
  • Class中具有幾個分析類的靜態方法:getFields,getMethods,getConstructors分別返回類的public例項域、方法、和構造器陣列,也包含了超類的公有成員;getDeclaredFields、getDeclaredMethods,getDeclaredConstructors分別返回類中宣告的包括私有、保護的所有成員,但不包括超類的例項和成員。
  • 呼叫反射方法時,invoke中第一個引數若是靜態物件則為null;

介面

  • 介面中的所有方法自動為public,可以省略關鍵字,在實現介面時必須提供關鍵字public;介面是類的一組特定需求
  • 介面中的域會自動為public static final;
  • 克隆:如果直接使用clone()函式,Object類中clone函式(是protected的)只對當前物件的所有基本域和方法進行拷貝,如果引用了其他物件域,則還是一個引用,即只是一個淺拷貝;若淺拷貝中只涉及一些不變的物件,則一般不影響克隆的物件;但是要淺拷貝中涉及到子物件的變更操作,則會在兩個副本中同時受影響。
  • 深拷貝需要實現cloneable介面,使用public重寫clone方法;
  • cloneable介面只是作為一個標記介面,與Object中的clone沒有關係;
  • 即使淺拷貝能夠滿足要求,也建議實現cloneable介面,並在clone方法中實現超類的clone方法;

內部類

  • 宣告定義在類中,可以訪問外部類的資料域
  • 內部類可以用private宣告,區域性內部類只能為預設的修飾符
  • 內部類不能在外部類的靜態方法中new,可以使用外部物件.new 的方式進行;
  • 匿名內部類無類名,也就沒有構造器;一般將構造器引數傳遞給超類進行構造,
  • 內部類可以宣告為static的

異常

  • Throwable分為Error和Exception,Exception分為IOException和RuntimeException;RuntimeException和Error是未檢查unchecked異常,另外為已檢查checked異常;
  • 編譯器檢查是否為所有的已檢查異常宣告異常處理器;
  • 使用異常的技巧:① 簡單檢查不能被異常處理替代,異常處理要耗費的時間長一點;② 不要過分細化異常;③ 利用異常層次結構;④ 不羞於傳遞異常,不壓制異常;⑤ 早丟擲,晚捕獲
  • Java中錯誤處理:異常、日誌、斷言

集合

  • 佇列:迴圈陣列或連結串列
  • Java中的所有連結串列都是雙向連結的。

多執行緒

  • 執行緒優先順序:子執行緒預設繼承父程序的優先順序。每當執行緒排程器有機會選擇新執行緒時優先選擇優先順序較高的,但是執行緒的優先順序是高度依賴於宿主機的作業系統的。

  • 執行緒安全的集合:

流和檔案

  • 抽象類InputStream、OutputStream,分別提供了讀寫操作,並且在讀寫過程將會被阻塞。
  • 二進位制檔案格式IO效率高,但不便於可讀性。