20155228 2016-2017-2 《Java程序設計》第5周學習總結


20155228 2016-2017-2 《Java程序設計》第5周學習總結

教材學習內容總結

異常處理

  • try-catch語法:JVM執行try區塊中的代碼,如果發生錯誤就會跳到catch進行比較,如果錯誤類型被拋出錯誤的類型相符就執行catch區塊中的代碼。

  • 錯誤會被包裝為可拋出的對象,錯誤對象都是繼承自Java.lang.Throwable類,Java.lang.Throwable類有兩個子類:java.lang.Error和java.lang.Exception。程序設計本身的錯誤一般使用Exception或其子類來實現。

  • 如果一個方法聲明會拋出Throwable或子類實例,只要不是屬於Error、java.lang.RuntimeException或其子類實例,就必須使用try-catch語法或者throws聲明這個方法會拋出異常,否則就會編譯失敗。

  • 在Exception或其子對象中,RuntimeException和其子對象成為執行時期異常或稱非受檢異常,其他的對象稱為受檢對象。

  • 父類異常對象的捕捉必須放在子類異常對象捕捉之前,否則父類異常對象永遠不會被執行,編譯會出錯。

  • 多重捕捉的catch中列舉的異常不能有繼承關系,否則編譯會出錯。

  • 如果拋出的是受檢異常,必須在方法上使用throws聲明,如果是拋出非受檢異常,就不需要throws聲明。

  • 堆棧追蹤可以知道異常的根源,可以調用異常對象的printStackTrace()方法得到異常的根源和調用方法的順序。getStackTrace()方法可以取得個別堆棧追蹤元素進行處理。fillInStackTrace()方法可以讓堆棧異常的起點為重拋異常的地方。

  • 斷言assert:

assert 表達式 //表達式的結果只能是true或者false,如果是false就會編譯出錯
assert 表達式1:表達式2 //表達式2在表達式1位false時執行
  • finally:try-catch語法可以和finally搭配,無論try區塊中是否有異常都會先執行finally區塊中的代碼。

  • 自動嘗試關閉資源:想要嘗試自動關閉資源的對象寫在try后面的括號之中。嘗試自動關閉資源的對象必須操作Java.lang.AutoCloseable接口。在try括號中,越后撰寫的對象資源越早被關閉。

Collection與Map

  • 收集對象的共同行為定義在Collection中,在收集對象會有不同的需求,會依據需求使用不同的接口操作對象。

  • list:一種以索引方式保留收集對象的順序的Collection。ArrayList在內存中是連續的線性空間,根據索引隨機存取時速度快,適用於排序。LinkedList采用了鏈接的結構,適用經常變動索引的情況。

  • Set:收集不重復的內容。hashset的操作概念是,每個內存空間都有一個hash編碼,這些空間稱為hash桶。如果一個對象要加入hashset,則會調用對象的hashCode()取得hash碼,並嘗試放入對應號碼的hash桶中。如果hash桶中已經有對象了,就會調用equals()進行比較。

  • Queue:收集的對象加入至尾端,取得對象時從前端。其中offer()方法用來加入對象,poll()方法用來取出對象,peek()方法是取出對象但是保留隊列中的對象。

  • 泛型:指定某個類或者方法支持泛型,可以用類型代號代替實際類型。

  • lambda表達式:lambda表達式的語法可以省略了接口類型與方法名稱,->左邊是參數列,而右邊是方法本體。

  • Interable和Ierator:使用Interable接口中的Interator方法收集所有對象

  • Comparable和Comparator:通過操作Comparable接口來使用Collection的sort()方法對對象排序。通過操作Comparator接口來重載sort()方法。

  • Map:通過操作java.util.Map接口,可以根據某個鍵來取得對應的值。HashMap不對鍵排序,TreeMap會對鍵排序。keySet()收集所有鍵,vaules()收集所有值,entrySet()收集鍵和值。

教材學習中的問題和解決過程

  • 關於教材P258頁第三題。我的理解是,題目中try檢查的numberformatexception指檢查輸入是否符合格式,因為輸入的one是字符串,而要求輸入的是整型數類型,所以我認為會顯示“必須輸入數字”。而網上提供的參考答案選擇的也是B。但是我在寫代碼的時候卻驚奇地發現,顯示結果為arrayindexoutofboundexception,數組超過預定義長度。

  • 關於教材P258-P259頁第四、五題和第六題的區別:第四題第五題是在一個類中調用了某個定義了拋出異常的方法(構造函數),在定義這個類的異常拋出的時候,可以定義和方法的異常拋出相同的類,也可以定義方法的異常拋出的類的父類。而第六題是繼承,子類在定義異常拋出的類時,只能定義父類的異常拋出的類或者其子類。

代碼調試中的問題和解決過程

  • 本周周內編程作業:關於Student類的對象實例的比較中遇到的問題:先定義好了student類,然后單獨新建了一個名為overridequals的類重新定義了equals方法,然后overrideequals繼承student類,最后再定義名為mian的類。編譯通過證明沒有語法問題,但事實上即使兩個student實例的所有成員都是一樣的,反饋都是不同。后來直接把重新定義eqauls的代碼放到student類中就沒有任何問題了。

代碼托管

  • 代碼提交過程截圖:
    • 運行 git log --pretty=format:"%h - %an, %cd : %s" 並截圖
  • 代碼量截圖:
    • 運行 find src -name "*.java" | xargs cat | grep -v ^$ | wc -l 並截圖

上周考試錯題總結

  • “Hello”.charAt(1) 的值是(‘e’)
  • System.out.println( “HELLO”.( toLowerCase() ) ) 會輸出“hello”..
  • “Hello”.substring( 0,2 )的值是“He”
  • CH06填空:在構造方法中調用本類的構造方法,要使用(this)關鍵字
  • CH06填空:在構造方法中調用父類的構造方法,要使用(super)關鍵字
  • CH07 填空:面向對象中,設計經驗可以用(設計模式)表達

結對及互評

評分標准(滿分10分)

  1. 從0分加到10分為止

  2. 正確使用Markdown語法(加1分):

    • 不使用Markdown不加分
    • 有語法錯誤的不加分(鏈接打不開,表格不對,列表不正確...)
    • 排版混亂的不加分
  3. 模板中的要素齊全(加1分)

    • 缺少“教材學習中的問題和解決過程”的不加分
    • 缺少“代碼調試中的問題和解決過程”的不加分
    • 代碼托管不能打開的不加分
    • 缺少“結對及互評”的不能打開的不加分
    • 缺少“上周考試錯題總結”的不能加分
    • 缺少“進度條”的不能加分
    • 缺少“參考資料”的不能加分
  4. 教材學習中的問題和解決過程, 一個問題加1分

  5. 代碼調試中的問題和解決過程, 一個問題加1分

  6. 本周有效代碼超過300分行的(加2分)

    • 一周提交次數少於20次的不加分

6 其他加分:
- 周五前發博客的加1分
- 感想,體會不假大空的加1分
- 排版精美的加一分
- 進度條中記錄學習時間與改進情況的加1分
- 有動手寫新代碼的加1分
- 課后選擇題有驗證的加1分
- 代碼Commit Message規范的加1分
- 錯題學習深入的加1分
7 扣分:
- 有抄襲的扣至0分
- 代碼作弊的扣至0分

點評模板:

  • 基於評分標准,我給本博客打分:(0-10)。得分情況如下:xxx

  • 參考示例

點評過的同學博客和代碼

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 20篇 400小時
第一周 10/10 1/4 12/12
第二周 120/130 1/5 9/21
第三周 210/340 1/6 9/30
第四周 460/800 1/7 9/39
第五周 400/1200 1/8 9/48

嘗試一下記錄「計划學習時間」和「實際學習時間」,到期末看看能不能改進自己的計划能力。這個工作學習中很重要,也很有用。
耗時估計的公式
:Y=X+X/N ,Y=X-X/N,訓練次數多了,X、Y就接近了。

參考:軟件工程軟件的估計為什么這么難軟件工程 估計方法

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM