Java程序設計筆記

對象的自動清除

  • 對象回收是由垃圾回收線程負責
  • System.gc()方法能夠要求系統進行垃圾回收,僅僅是建議系統
  • java沒有「析構方法」,但Object的finalize()有相似方法
  • 系統在回收時會自動調用對象的finalize()方法
protected void finalize() throws Throwable{}
  • 子類的finalize方法能夠在裏面釋放系統資源,通常來講,子類的finalize方法中應該調用父類的finalize方法。

內部類與匿名類

內部類

  • 定義在一個類的內部
  • 使用分爲內部使用和外部使用
  • 內部類總能夠直接訪問外部類的字段及放啊
  • 內部類總訪問外部類的字段能夠用「外部類名.this.字段」的方式
  • 用static修飾內部類,代表該內部類實際是一種外部類java

    • 由於它與外部類的實例無關
    • 有人認爲static的類是嵌套類,不是內部類

內部類的使用

匿名類

  • 它沒有類名,在定義類的同時就生成該對象的一個實例,不取名字,直接用父類或接口的名字
  • 一次性使用的類

例子:算法

new Handler(){
...
}

局部類

  • 同局部變量同樣,方法中的內部類sql

    • 不能用public,private,protected,static修飾
    • 但能夠被final,abstract修飾
  • 能夠訪問器外部類的成員
  • 不可以訪問該方法的局部變量,除非是final局部變量。

Lambda表達式

  • 基本寫法數組

    • (參數) -> 結果

例子:緩存

(String s) -> s.lenth();
x -> x*x;
() -> {System.out.println("aaa")}
  • 大致上至關於其它語言的」匿名函數」或」函數指針」
  • 在java中它其實是「匿名類的一個實例」

裝箱

基本類型的包裝類

  • 它將基本類型包裝成Object
  • integer i = new Integer(10);

Integer i=10;
實際爲:Integer i=Integer.valueOf(10);安全

拆箱

int a=i;
實際爲:a=i.intValue();併發

枚舉

能夠在enum定義體中,添加字段,方法,構造方法
image框架

註解

  • 又稱爲註記,標記,標記,註釋
  • 是在各類語法要素上加上附加信息,以供編譯器或其餘程序使用
  • 經常使用註解:

@Override 表示覆蓋父類的方法
@Deprecated 表示過期的方法
@SuppressWarnings 標識讓編譯器不產生警告ide

引用與指針

  • 引用實質就是指針

可是它是受控的,安全的
好比:函數

  • 會檢查空指引
  • 沒有指針運算
  • 不能訪問沒有引用到的內存
  • 自動回收垃圾

(1) 指針 》引用類型,引用自己就至關於指針,能夠用來修改對象的屬性,調用對象的方法
(2)指針運算 》數組
(3)函數指針 》接口,lambda表達式
(4)指向結點的指針 》對象的引用
(5)使用JNI

  • java Native interface

    • 它容許java代碼和其餘語言寫的代碼進行交互

基本類型的相等

基本類型:

  • 數值類型:轉換後比較
  • 浮點數,最好不直接用==
  • Double.NAN==Double.NAN結果爲false
  • boolean型沒法與int比較

注 valueOf() -128到127會有緩存,超過的話就沒有緩存了

枚舉類型

  • 內部進行了惟一實例化,能夠直接判斷

引用對象

  • 「==」是直接看兩個引用是否同樣
  • 若是要判斷內容是否同樣,則要重寫equals方法
  • 若是重寫equals方法,則最好重寫hashCode方法,由於通常之內容的hashCode做爲惟一性標誌

[圖片上傳失敗...(image-845e09-1522336106762)]

String對象的特殊性

  • 判斷對象,必定不要用==,要用equals
  • 可是字符串變量及字符串常量會進行內部化,相同的字符串常量是==的

String對象的特殊性

異常

  • 異常又稱爲例外,差錯
  • 對應着java運行錯誤處理機制

基本寫法:

try{
    語句組
}catch(Exception ex){
    異常處理語句組;
}

java中處理異常

  • 拋出異常
  • 運行時系統在調用棧中查找:從生成異常的方法開始進行回溯,直到找到
  • 捕獲異常的代碼

異常的分類

  • Throwable

    • Error:JVM錯誤
    • Exception

多異常的處理

  • 子類異常要排在父類異常的前面
  • finally語句

    • 不管有無異常,都會執行處理語句

受檢的異常

Exception分兩種

  • RuntimeException及其子類,能夠不明確處理
  • 不然,稱爲受檢的異常,受檢的異常,要求明確進行語法處理,要麼捕獲,要麼拋出異常

自定義異常

建立用戶自定義異常類

  • 繼承自Exception類或某個子Exception類
  • 定義屬性和方法,或重載父類的方法
  • 對於異常,不只要進行捕獲處理,有時候還須要將異常進一步傳給調用者,一變讓調用者也能感覺到這種異常,這是能夠在catch語句塊或finally

語句塊中採起如下三種方式:

  • 將當前捕獲的異常再次拋出
  • 從新生成一個異常,並拋出
  • 從新生成一個新異常,該異常中包含了當前異常的信息,如throw new Exception (「some message 「,e)

斷言及程序的調試

斷言

  • assert 表達式
  • assert 表達式,信息
  • 在調試程序時,若是表達式不爲true,則程序會產生異常,並輸出相關的錯誤信息


assert hypotenuse(3,4)==5:」算法不正確」;

它起到對程序的檢測做用

編譯及運行

  • 只有在JDK1.4及以上的版本纔可使用斷言
  • 在運行時,要使assert起做用,則在運行時,使用選項(-ea ,即-enableassetions)

如 java -ea - classpath.Assertion

程序的測試及Junit

  • 在編寫程序代碼的同時,還編寫測試代碼來判斷這些程序是否正確,這個過程稱爲「測試驅動」的開發過程
  • 在java的測試過程,常用Junit框架

測試函數

@Test來標註測試函數
fail(info) :表示信息出錯
assertEqauls(arg1,arg2):表示程序要保證兩個參數相等
assertNull(arg):表示參數要爲null

程序的調試

  • 語法錯誤(Syntax error):編輯,編譯器發現
  • 運行錯誤(Runtime error):異常處理機制
  • 邏輯錯誤(Logic error):調式(debug),單元測試(unit test)

程序的調試

  • 在IDE中,項目中點右鍵,debug as
  • 進入到調試視圖(debug perspective)

調試的手段

  • 斷點(breakpoint)
  • 跟蹤(trace)
  • 監視(watch)
在頗有可能有錯誤的地方設置斷點,而後跟蹤

java基礎類庫

  • java.lang core
  • java.util
  • java.io
  • java.awt
  • java.net
  • java.sql

    Object類

  • Object類是全部類的直接或間接父類
  • 讓全部的類有了一致性
  • equals()

    • ==是引用相等,equals是內容相等
    • 若是覆蓋equals方法,通常也要覆蓋hashcode方法
  • getClass()方法是final方法,它返回一個對象在運行時所對應的標識
  • toString返回對象的字符串表示
  • finalize用於在垃圾收集前清除對象
  • notify(),notifyAll(),wait()線程相關

System類

  • System.getProperty(String name)獲取特定的系統屬性值

線程

  • 進程:一個程序的運行
  • 線程:程序中單個順序的流控制稱爲線程

一個進程中能夠含有多個線程
一個進程中的多個線程

特色

  • 分享CPU(併發的或以時間片的方式)
  • 共享內存
  • 線程體 — run()方法來實現的
  • 線程啓動後,系統就自動調用run()方法

使用

  • 經過繼承Thread類
  • 經過向Thread()構造方法傳遞Runnable對象
  • 可用匿名類實現Runnable或用lambda表達式
  • 線程池封裝
相關文章
相關標籤/搜索