20155336 2016-2017-2《JAVA程序設計》第五週學習總結

20155336 2016-2017-2《JAVA程序設計》第五週學習總結

教材學習內容總結

第八章html

  • 語法與繼承構架
  • 使用trycatch前端

    • 特色:java

      • 使用trycatch語法,JVM會嘗試執行try區塊中的程序代碼。若是有錯誤發生,會跳離錯誤發生點,執行catch區塊中的代碼。
      • 執行完catch區塊後,沒有其餘程序代碼,程序就會結束。
    • 注意:git

      - 在java中,全部的錯誤都會被打包成爲對象。而try、catch是在發生了InputMismatchException的錯誤。(實際上並不鼓勵,在             
        異常繼承架構分析。)
  • 異常繼承架構:express

    • 特色:編程

      • 設計錯誤的對象都繼承自java.lang.Throwable類,其有兩個子類java.lang.Errorjava.lang.Exception
      • Error錯誤:JVM內部的嚴重問題。沒法恢復。程序人員不用處理。
      • Exception異常:普通的問題。經過合理的處理,程序還能夠回到正常執行流程。要求編程人員要進行處理。
      • RuntimeException:也叫非受檢異常。這類異常是編程人員的邏輯問題。java編譯器不進行強制要求處理。也就是說,這類異常在程序中,能夠進行處理,也能夠不處理。
      • RuntimeException:也叫受檢異常。這類異常是由一些外部偶然因素所引發的。java編譯器強制要求處理。也就是說,程序必須進行對這類異常的處理。
      • 若是是檢受異常,可由方法的客戶端依據當時調用的環境信息進行處理,必須使throws聲明此方法會拋出的異常類或父親類。
      • 若是是非受檢異常,本來就能夠自行選擇石佛偶處理異常,也不用特別在方法上使用throws聲明。
      • 若是某個方法聲明會拋出Throwable或子類實例,只要不是屬於Errorjava.langRuntimeException或其子類實例,就必須明確使用trycatch語法加以處理,或者用throws聲明這個方法會拋出異常。
    • 注意:設計模式

      - Error與其子類實例表明嚴重的系統錯誤,其對象拋出時,基本不用處理,任其傳播至JVM爲止,或者最多留下日誌信息。
       - 使用try、catch捕捉異常對象時也要注意,若是父類異常對象在子類異常前被捕捉,則catch子類異常對象的區塊永遠不會被執行。
       - catch括號中列出的異常不得有繼承關係,不然會發生編譯錯誤。
       - java是惟一採用受檢異常的語言,一是爲了文件化,客戶端只要查閱文件,就能夠知道哪些方法可能發生異常;二是提供編譯程序            
         信息,讓編譯程序可以在編譯時期就檢查出API客戶端沒有處理異常。
  • 關於抓和拋:數組

    • 特色:架構

      • 若是編譯程序會拋出受檢異常,沒法使用trycatch處理時,必須使用throws聲明此方法會拋出的異常類型或父類型,編譯程序纔會讓你經過編譯。
      • 若是拋出非受檢異常,在java中的設計上認爲,非受檢異常是程序設計不當引起的漏洞,異常應自動往外傳播。
      • 實際上,先可以使用trycatch處理完部分錯誤後,可使用throw拋出。
      • 從新拋出異常時,若是認爲調用API的客戶端應當有能力處理未處理的錯誤,就自定義受檢異常、填入適當錯誤信息並從新拋出,並在方法上使用throws加以聲明;若是認爲調用API的客戶端沒有準備好就調用了方法,纔會形成還有未處理的錯誤,就自定義非受檢異常、填入適當錯誤信息並從新拋出。
    • 注意:ide

      - 先處理後拋出的時候是使用throw不是throws。
       - 在自定義類別的時候一般建議繼承自Exception或其子類。
       - 在流程中要拋出的異常,也要思考一下,關鍵在於這是客戶端能夠處理的問題嗎?仍是客戶端沒有準備好前置條件就調用方法,才引起的異常?
  • 認識堆棧追蹤:

    • 特色:
      • 採用直接調用異常對象的printStackTrace()
      • 善用堆棧追蹤,不可有私吞異常的行爲、對異常作了不當的處理。
      • 在使用throw重拋異常時,異常的追蹤堆棧起點,任然是異常發生的根源。
    • 注意:

      - 若是想要讓異常堆棧成爲重拋異常的地方,可使用fillInStrackTrace()方法,這個方法會從新裝填異常堆棧,將起點設爲重             
        拋異常的地方,並返回Throwable對象。
  • 關於assert:

    - 是一種斷言,預期結果與實際程序狀態相同,斷言成立,不然斷言不成立。在java中使用-enableassertions或者是-ea自變量在執行時啓動斷言檢查。
    - assert有兩種使用方法 1. assert boollean_expression;2. assert boolean_expression:detail_pression。
    - checkGreatThanZero()是一種前置條件檢查,若是程序上線以後就不須要這種檢查的話,能夠將之assert取代。
    - charge()方法中使用了批註來提示方法調用後的對象狀態必不可義爲負,不如使用assert取代。
  • 異常與資源管理:程序因錯誤而拋出異常時,本來的執行流程就會中端,若是程序開啓了相應得資源,應該在使用完後關閉資源。

    • 特色:
      • 使用法finallytrycatch能夠搭配finally區塊使用。且該區塊必定會被執行。
      • 能夠先檢查scanner是否爲null,仔調用close()方法關閉Scanner
      • 嘗試關閉語法資源可套用的對象,必須操做java.lang.AutoClothesable接口
      • 嘗試關閉語法資源能夠同時關閉兩個以上的對象資源,只要中間以分號分割。
    • 注意:

      - 若是撰寫的流程中線先return,並且也有`finally`區塊,那`finally`區塊會先執行後再將值返回。
      - 嘗試自動關閉資源的對象,是撰寫在`try`以後的括號中。
      - 在try括號中,越後面撰寫的對象的資源會越早關閉。

第九章

  • 使用Collection收集對象
  • 瞭解Collection架構

    • 在使用知足各類需求的API前,須要先了解其繼承與接口操做,才能瞭解什麼時候採用哪一個類,以及類間如何彼此合做。
    • 能夠清楚地明瞭哪些類操做了哪一個接口,繼承了那個類,或哪些接口又繼承自哪一個接口。總之可在API文件上查詢。
  • 具備索引的List

    • 特色:

      • 是一種Collection,收集對象,並以索引的方式保留收集的對象順序。
      • java.util.ArrayList,數組在內存中會是連續的線性空間,根據索引隨機存取時速度較快。
      • LinkedList在操做List接口,才用了鏈接結構。
      • 在每次add()對象時,會創建新的Node來保存對象,不會事先消耗內存。
    • 注意:

      ArayList若是須要調整索引順序時,會有較差的表現,使用ArrayList操做此類並不經濟。
      
      若是收集的對象常常會有變更索引的狀況,也許考慮連接方式操做的List比較合適。
  • 內容不重複的set

    • 特色:

      • 在收集過程當中如有相同對象,則不在重複收集。
      • Stringsplit(),能夠指定切割字符串的方式。
      • 調用setsize()方法,就能夠知道收集的字符串個數。
      • HashSettoString()操做,會包括收集的字符串。
      • 會使用對象hashcode()與equals()來判斷對象是否相同。
    • 注意:

      若是同一個哈希桶已有對象,調用該對象equals()與要加入的對象比較,結果爲false則非重複,給予收集true表示兩個是重複對象,不予收集。
  • 支持隊列操做的Queue

    • 若是但願收集對象時以隊列的方式,收集的對象加入至尾端,取得對象是從前端。

    • 本身定義了offer()、poll()、peek()等。這些方法在操做失敗的時候會返回特定的值。

    • Queue的子接口Deque定義了對隊列的前端與尾端進行操做,在前端加入對象與取出對象,在尾端加入或取出對象。

    • addLast()、removeLast()、getLast()等方法。一樣在其操做失敗時返回特殊值。

  • 使用泛型和lambda表達式

    • 特色:

      • 不知道被收集對象的形態,在內部操做時,都是使用Object來參考被收集的對象。取回對象時也是以Object類型返回。
      • 泛型語法支持API時能夠指定類或方法支持泛型類名稱。
      • 在類名稱旁用角括號表示支持此類泛型。
      • lambda表達式注意符號->左邊是參數列,右邊是方法本體。(若是是單參數又無須寫出參數的類型時候()能夠省略)
    • 注意:

      - 書上的例子角括號中的E只是一個類型表明。
      - 這類API沒有指定類型參數實際類型,程序代碼中出現類型參數的地方就會迴歸使用Object類型。
      - 使用lambda表達式,編譯程序在推斷類型時候,還可使用泛型聲明的類型做爲信息來源。
  • Interable與Iterator

    • iterator()方法,定義在Collection。該方法會返回java.util.Iterator接口操做對象,這個對象包括了Collection收集的全部的對象,可使用Iterator的hasNext()看看有無下一個對象,如有的話在使用next()取得下一對象。可以使用forEach()來收集對象。
    • JDK5以後,將iterator()方法,提高至新的java.util.Iterable父接口。實際上仍是調用了iterator()方法,運用返回的Iterator對象來迭代取得收集的對象。
  • Comparable與Comparator

    • 操做Comarable
      • Collectionsort()方法必須操做java.lang.Comparable接口,接口有個方法compare()方法若是a對象順序小於b對象順序返回小於0的值,若順序上相等則返回0,若順序上a大於b則返回大於0的值。
      • set的操做類之一java.util.TreeSet不只擁有收集不重複對象的能力,還能夠用紅黑樹方式排序收集的對象,但條件必須是Comparable
      • Queue的操做類之一java.util.PriorityQueue收集至PriorityQueue的對象,會根據指定的優先權來決定對象在對列中的順序,優先權的告知,對象必須是Comparable或者是建立PriorityQueue時指定Comparator對象。
    • 操做Comparator
      • 接受java.util.Comparator接口操做對象,根據caompare()決定。其會傳入兩個對象,若是o1順序上小於o2則返回小於0的值,順序相等則返回0的值,順序上o1大於o2則返回大於0的值。
  • 鍵值對應的Map

    • 特色:

      • 事先利用java.util.Map接口的操做對象來創建鍵值對應數據。
      • 經常使用的Map操做類爲Jjava.util.HashMap與java.util.TreeMap,其繼承自抽象類java.util.AbstractMap。
      • HashMap,要創建鍵值對應,可使用put()方法,第一個自變量是鍵,第二個自變量是值。對於Map而言,鍵不會重複,判斷是否重複根據hashCode()與equals()
      • TreeMap,鍵的部分將被排序,條件是做爲鍵的對象必須操
      • Comaprable接口,或者是在建立TreeMap時指定Comparator接口對象。
      • PropertiessetProperty()指定字符串類型的鍵值,getProprty指定字符串類型的鍵,取回字符串類型的值,一般稱爲屬性名稱與屬性值。
      • 可使用getProperties()取得ProPerties實例。
      • 若是想要取得Map中全部的鍵,能夠調用MapKeySet()返回Set對象。
      • 若是想取得Map全部的值,可使用values()返回Collection對象。
      • 若是想同時取得Map的鍵與值,可使用entrySet()方法,這會返回一個Set對象,每一個元素都是Map.Entry實例,能夠調用getKey()取得鍵,調用getValue()取得值。
    • 注意

      .properties的=左邊設定屬性名稱,右邊設定屬性值。
      
       除了可載入.properties文檔外,也可使用loadfromXML()方法加載.xml文檔,必須注意文件格式。

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

  • 問題1: throw 究竟是什麼啊?該怎麼樣使用? 心好累~~~T - T @-@

    - throw是拋出一個異常,這個異常能夠是系統定義的異常,也能夠是自定義的異常(運行時產生的異常是由系統來負責的,throw是由我
    
     們來控制的)。在一個方法體中,若是產生了異常(主動拋出或者運行時產生的異常),那麼通常有兩種處理方法。第一種就是try-catch
    
     捕獲異常,並做處理。第二種就是不做任何處理,在方法名後面直接用throws將方法體裏面的異常再往上拋出,拋到調用這個方法的地方
    
     再作捕獲處理,或者也可繼續往上拋,這裏用的就是throws。這兩種處理到最後都是要捕獲處理的。因此說trow就是顯示的用來拋出一個
    
     異常的,throws是方法將本身方法體內運行產生的異常或顯示拋出而未處理的異常再往外拋時用的,它能夠是多個。
  • 問題2: 各類異常之間存在怎樣的關係?

    Error(嚴重系統錯誤) 受檢異常(客戶端有能力處理):Exception 非受檢異常(未在恰當時機調用方法):RuntimeException

上週考試總結

  • 填空:使用JDB進行調試時單步執行命令有step和next,咱們優先使用(next)
  • "hello"。substring(0,2)的值是"He"。
  • 判斷:final能夠用在類,方法,變量前。(OK)
  • 面向對象中,設計經驗能夠用(設計模式)表達

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

  • 問題1:

    package cc.openhome;
    
    import java.util.*;
    
    class Student{
    private String name;
    private String number;
    Student (String name , String number){
    this.name = name;
    this.number = number;
    }
    
     @Override
     public String toString(){
    return  String.format("(%s,%s)", name,number);
    }
    }
    
    public class Students {
    public static void main(String[] args){
       Set students = new HashSet();
    students.add(new Student("Justin","B835031"));
    students.add(new Student("Monica","B835032"));
    students.add(new Student("Justin","B835031"));
    System.out.println(set);//這裏
    }
    }

    根據書上,這個代碼最後一行代碼爲System.out.println(set);可是卻編譯不經過顯示錯誤。跟同窗討論後,將set改成student以後,編譯就經過了!

  • 問題2:

    import java.util.HashMap;
    import java.util.Map;
    
    import static java.lang.System.out;
    public class MapKeyValue {
    public static void main(String[] args) {
    Map<String, String> map = new HashMap<>();
    map.put("one", "一");
    map.put("two", "二");
    map.put("three", "三");
    out.println("顯示鍵");
    map.keySet().forEach(key -> out.println(key));
    out.println("顯示值");
    map.values().forEach(key -> out.println(key));
    }
    }

爲何書上顯示的是二一三,而我是一二三?

其餘(感悟、思考等,可選)

本次學習過程當中,遇到的問題比較多,並且很複雜。一是時間很緊,二是一週兩章確實真的很要命啊,這周內容這麼難更無法徹底掌握了。只能

 先跟着老師的思路跑了跑程序,詳細的等之後再理解。每一個人都會有所差異,對於編程的領悟也不一樣,以致於每一個人的學習程度,優良中差也不

 同。可是我也在盡我最大的努力去學,如今的電子水平愈來愈高。相似於博客這種電子化的做業也會有不少方面來源的複製,不能僅僅憑藉博客

 的好壞來判斷本身的學習好壞,可是雖然我以爲我本身雖然學習java不是很優秀,可是我本身知道我在很努力學,堅持老是會有進步的。

代碼託管

結對及互評

評分標準(滿分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分

點評模板:

  • 基於評分標準,我給本博客打分:10。得分狀況以下:

    • 正確使用Markdown語法
    • 模板中的要素齊全
    • 教材學習中的問題和解決過程, 一個問題加1分,一共倆
    • 代碼調試中的問題和解決過程, 一個問題加1分,一共倆
    • 本週有效代碼超過300分行的(加2分)
    • 感想,體會不假大空的加1分
    • 有動手寫新代碼的加1分
    • 代碼Commit Message規範的加1分
    • 課後選擇題有驗證的加1分

就這10分根本不夠加的~~~

點評過的同窗博客和代碼

學習進度條

| 代碼行數(新增/累積)| 博客量(新增/累積)|學習時間(新增/累積)|重要成長|

  --------   | :----------------:|:----------------:|:---------------:  |:-----:|

| 目標        | 5000行            |   30篇           | 400小時            |       |

| 第一週      | 200/200           |   2/2            | 20/20             |       |

| 第二週      | 300/500           |   2/4            | 18/38             |       |

| 第三週      | 500/1000          |   3/7            | 22/60             |       |

| 第四周      | 800/1300          |   4/9            | 30/90             |       |

| 第五週      | 1800/2000          |   5/9            | 45/100             |       |

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法

參考資料

相關文章
相關標籤/搜索