對象的自動清除
- 對象回收是由垃圾回收線程負責
- System.gc()方法能夠要求系統進行垃圾回收,僅僅是建議系統
- java沒有「析構方法」,但Object的finalize()有相似方法
- 系統在回收時會自動調用對象的finalize()方法
protected void finalize() throws Throwable{}
- 子類的finalize方法能夠在裏面釋放系統資源,通常來講,子類的finalize方法中應該調用父類的finalize方法。
內部類與匿名類
內部類
匿名類
- 它沒有類名,在定義類的同時就生成該對象的一個實例,不取名字,直接用父類或接口的名字
- 一次性使用的類
例子:算法
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定義體中,添加字段,方法,構造方法
框架
註解
- 又稱爲註記,標記,標記,註釋
- 是在各類語法要素上加上附加信息,以供編譯器或其餘程序使用
- 經常使用註解:
@Override 表示覆蓋父類的方法
@Deprecated 表示過期的方法
@SuppressWarnings 標識讓編譯器不產生警告ide
引用與指針
可是它是受控的,安全的
好比:函數
- 會檢查空指引
- 沒有指針運算
- 不能訪問沒有引用到的內存
- 自動回收垃圾
(1) 指針 》引用類型,引用自己就至關於指針,能夠用來修改對象的屬性,調用對象的方法
(2)指針運算 》數組
(3)函數指針 》接口,lambda表達式
(4)指向結點的指針 》對象的引用
(5)使用JNI
基本類型的相等
基本類型:
- 數值類型:轉換後比較
- 浮點數,最好不直接用==
- Double.NAN==Double.NAN結果爲false
- boolean型沒法與int比較
注 valueOf() -128到127會有緩存,超過的話就沒有緩存了
枚舉類型
引用對象
- 「==」是直接看兩個引用是否同樣
- 若是要判斷內容是否同樣,則要重寫equals方法
- 若是重寫equals方法,則最好重寫hashCode方法,由於通常之內容的hashCode做爲惟一性標誌
[圖片上傳失敗...(image-845e09-1522336106762)]
String對象的特殊性
- 判斷對象,必定不要用==,要用equals
- 可是字符串變量及字符串常量會進行內部化,相同的字符串常量是==的
異常
- 異常又稱爲例外,差錯
- 對應着java運行錯誤處理機制
基本寫法:
try{
語句組
}catch(Exception ex){
異常處理語句組;
}
java中處理異常
- 拋出異常
- 運行時系統在調用棧中查找:從生成異常的方法開始進行回溯,直到找到
- 捕獲異常的代碼
異常的分類
多異常的處理
受檢的異常
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方法,通常也要覆蓋hashcode方法
- getClass()方法是final方法,它返回一個對象在運行時所對應的標識
- toString返回對象的字符串表示
- finalize用於在垃圾收集前清除對象
- notify(),notifyAll(),wait()線程相關
System類
- System.getProperty(String name)獲取特定的系統屬性值
線程
- 進程:一個程序的運行
- 線程:程序中單個順序的流控制稱爲線程
一個進程中能夠含有多個線程
一個進程中的多個線程
特色
- 分享CPU(併發的或以時間片的方式)
- 共享內存
- 線程體 — run()方法來實現的
- 線程啓動後,系統就自動調用run()方法
使用
- 經過繼承Thread類
- 經過向Thread()構造方法傳遞Runnable對象
- 可用匿名類實現Runnable或用lambda表達式
- 線程池封裝