java.lang.Error
和java.lang.Exception
(異常處理)兩個子類try{ ... }catch(IOEeception | InterruptedException | ClassCastException e) { e.printStackTrace(); }
FileInputStream
能夠指定檔名來開啓與讀取文檔內容,可是在建立時會FileNotFoundException
錯誤。拋出受檢異常表示客戶端有能力且應處理異常,必須在方法上使用throws聲明。java.util.Iterator
接口的操做對象,這個對象包括了Collection收集的全部對象;加強式for循環還能夠運用在操做Iterable接口的對象上。public class FinallyDemo{ public static void main(String[] args){ System.out.println(test(true)); } static int test(boolean flag){ try{ if(flag){ return 1; } }finally{ System.out.println("finally..."); } return 0; } }
Request request=()->out.printf("處理數據 %f",Math.random());
Lambda表達式的語法省略了接口類型和方法名稱。—>左邊是參數列,右邊是方法本體。編譯程序能夠由Request request的聲明中得知語法上被省略的信息。import java.util.*; interface Request2 { void execute(); } public class RequestQueue2 { public static void main (String[] args) { Queue<Request2>requests = new LinkedList<>(); offerRequestTo(requests); process(requests); } static void offerRequestTo(Queue<Request2>requests) { for (int i = 1; i < 6;i++) { requests.offer (() -> System.out.printf("處理數據%f%n",Math.random())); } } static void process(Queue<Request2>requests) { while(requests.peek() != null) { Request2 request = requests.poll(); request.execute(); } } }
解決方案:須要注意若是父類異常對象在子類異常對象前被捕捉,則catch子類異常對象的區塊永遠不會被執行。總結爲:子類不能比父類拋出更大的異常。這個問題經過看了狄唯佳同窗的博客得以解決。html
- 子類覆蓋父類方法是,父類方法拋出異常:子類的覆蓋方法能夠不拋出異常,或者拋出父類方法的異常。2. 父類方法拋出了多個異常,子類覆蓋方法時,只能拋出父類異常的子集。3. 父類沒有拋出異常,則子類不可拋出異常。若子類發生非運行時異常,須要進行try-catch處理,不能拋出。4. 子類不能比父類拋出更大的異常。
public class TestFinally { public static void main(String[] args) { try{ System.out.printf("nomal"); }catch (Exception ex){ System.out.printf("Exception"); }finally { System.out.printf("Finally"); } } }
執行結果:
java
在try或是catch塊中使用了return語句,將代碼稍做修改:git
public static void main(String[] args) { try{ System.out.printf("nomal"); }catch (Exception ex){ System.out.printf("Exception"); return; }finally { System.out.printf("Finally"); } }
執行結果:finally中的代碼仍是執行了
設計模式
再次簡單修改代碼:數組
public static void main(String[] args) { try{ System.out.printf("nomal"); System.exit(0); }catch (Exception ex){ System.out.printf("Exception"); System.exit(0); }finally { System.out.printf("Finally"); } }
運行代碼,結果爲:System.exit()終止了JVM,finally不執行。
架構
Cannot resolve symbol 'set'
解決:參考這個圖可知除被本類或者派生類(子類)的成員函數訪問外,還能夠被本包內全部類訪問
dom
本週由於準備二級的緣由,代碼敲得有些少,從週日纔開始學習Java,下週仍是會利用平時的時間學習。慢慢找到了平時測試的套路,可是動手實踐仍是不多,獨自編寫一個新學的程序仍是有必定困難。ide
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 50/100 | 1/1 | 24/24 | 安裝學習Java的一系列軟件 |
第二週 | 250/300 | 1/2 | 30/54 | 瞭解Java的基本語法 |
第三週 | 552/852 | 1/3 | 16/60 | 瞭解Java是面向對象的語言 |
第四周 | 717/1569 | 1/4 | 10/70 | 瞭解Java繼承與接口 |
第五週 | 495/2064 | 1/5 | 6/76 | 瞭解異常處理,學會使用Collection收集對象 |
嘗試一下記錄「計劃學習時間」和「實際學習時間」,到期末看看能不能改進本身的計劃能力。這個工做學習中很重要,也頗有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。函數
參考:軟件工程軟件的估計爲何這麼難,軟件工程 估計方法學習
計劃學習時間:10小時
實際學習時間:6小時