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

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

學習目標

  • 瞭解NIO
  • 會使用Channel、Buffer與NIO2
  • 會使用日誌API、國際化
  • 會使用正則表達式
  • 瞭解JDK8加強功能

教材學習內容總結

本週主要進行第十四章和第十五章的學習。html

第十四章java

  • NIO使用頻道(channel)來銜接數據節點,對數據區的標記提供了clear(),rewind(),flip(),compact()等高級操做。
  • 想要取得channel的操做對象,可使用channels類。
  • 現今世界上存在着各式各樣的文件系統,不一樣的文件系統會提供不一樣的存取方式,文件屬性,權限控制等操做。在JDK7出現之前,常須要對特定的文件撰寫特定的程序,不只撰寫方式沒有標準,針對特定功能撰寫的程序也會增長應用程序開發者的負擔。
  • 能夠繼承Handler類,操做抽象方法publish()、flush()與close()方法來定義Handler。Handler負者輸出,Formatter負者格式化,Filter負者信息過濾。
  • 能夠經過logging.properties來設定Logger組態,這樣就能夠不用使用程序對組態進行修改。

第十五章git

  • java.util.loggging包提供了日誌功能相關類與接口。
  • Logger與Handler默認都會先依據Level過濾信息,若是沒有作任何修改,取得的Logger實例之父Logger組態就是Logger.GLOBAL-LOGGER-NAME空間名稱Logger實例的組態。
  • Logger是起點,必須先經過Logger的Level與Filter過濾,再經過Handler的Level與Filter過濾,格式化信息的動做交給Formatter,輸出信息的動做其實是Handler負者。
  • 標準API提供了幾個操做類:其中MemoryHandler不會格式化日誌信息,信息會暫存於內存緩衝區,直至超過大小纔將信息輸出至指定的目標Handler。StreamHandler可自行指定信息輸出時使用的OutputStream。ConsoleHandler建立時,會自動指定OutputStream爲System.err。SocketHandler建立時能夠指定主機位置與端口。
  • 若是java.util.logging包中提供的Handler成果都不符合需求,能夠繼承Handler類,操做抽象方法publish()、flush()與close()方法來自定義Handler。
  • 在職責分配上,Handler是負責輸出,格式化是交由Formatter,而信息過濾是交由Filter。Handler有默認的isLoggable()操做,會先依據Level過濾信息,再使用指定的Filter過濾信息。format()方法會傳入LogRecord,存儲全部日誌信息。
  • 在創建FileHandler指定模式字符串時,可使用「%h」來表示用戶的根目錄,還可使用「%t」取得系統暫存目錄,或者使用「%g」自動爲文檔編號。
  • 自定義Handler、Formatter與Filter
  • 在職責分配上,Handler是負責輸出,Formatter負責格式化,而信息過濾是交由Filter。
  • 自定義Formatter,能夠繼承Formatter後操做抽象方法format(),這個方法會傳入LogRecord,儲存全部日誌信息。
  • 使用ResourceBundle

ResourceBundle的靜態getBundle()方法會取得一個ResourceBundle的實例,所給定的自變量名稱是信息文檔的主文件名,getBundle()會自動找到對應的.properties文檔,取得ResourceBundle實例後,可使用getString()指定鍵來取得。正則表達式

  • 國際化的三個重要概念是地區信息,資源包和基礎名稱。

地區信息:由語言編碼和地區編碼組成數組

資源包:包括特定地區相關信息函數

表明同一組信息但不一樣地區的各個資源包會共享相同的繼承名稱。學習

  • 字面意義字符是指按照字面意義比較的字符。元字符時不按照字面比較,在不一樣情境有不一樣意義的字符。編碼

  • java.util.regex.Pattern實例是規則表達式在JVM中的表明對象,Pattern的構造函數被標示爲private,經過Pattern的靜態方法compile()來取得。Pattern.compole()方法的另外一版本,能夠指定旗標(Flag)。.net

  • 在取得Pattern實例後,可以使用方法:設計

split()方法:將指定字符串依規則表達式切割

matcher()方法:指定要比較的字符串

find()方法:看看是否是有下一個符合字符串

lookingAt():看看字符串開頭是否符合規則表達式

group():能夠返回符合的字符串。

  • 在取得Matcher實例後,可以使用方法:

replaceAll()能夠將符合規則表達式的部分以指定的字符串取代

replaceFirst()取代首個組合規則表達式的部分

replaceEnd()取代最後符合規則表達式的部分

start()方法能夠取得符合字符串的初始索引

end()方法能夠取得符合字符串最後一個字符後的索引

  • 在JDK8中,String新增了join()靜態方法能夠直接指定每一個字符串間以逗號分隔進行鏈接。

  • JDK8中,針對大型數組的平行化操做,在Arrays上新增了parallelPrefix()、parallelSetAll()與parallelSort()方法,parallelSort()方法。

parallelPrefix()方法,能夠指定×××BinaryOperator實例。

parallelSetAll()方法,能夠用來對數組進行初始化或者全面重設每一個索引元素。

parallelSort()方法,能夠將指定的數組分爲子數組並以平行化方式分別排序,而後再進行合併排序。

  • Stream是JDK8中重要的新特性之一。Files上有幾個靜態方法,例如lines()、list()、walk()等方法,對於這類返回Stream實例的API,主要可適用於須要管線化、惰性操做的場合。

  • 若是想對數組進行管線化操做,方法之一市是使用Arrays的asList()方法返回List,然後調用stream()方法取得Stream實例,另外一個方法是使用Arrays的stream()方法,它能夠指定數組後返回Stream實例。

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

<1>Channel: 銜接數據節點(與IO中的流對比)

  • isOpen
  • close

<2>Buffer: 塊操做

  • clear
  • flip
  • rewind
  • mark
  • reset
  • remaining

<3>正則表達式簡介

  • 字符與元字符
  • 字符類
  • 貪婪、非貪婪、獨佔量詞
  • 邊界比較:錨點
  • 分組與反向引用

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

<1>p475 HandlerDemo.java:%h從哪來的?還有什麼其餘模式字符串?

  • 解決方案:是程序配置操做記錄文件,(但是我沒找到本身電腦上的)%h表示代碼根目錄,%t表明系統暫存目錄,%g自動爲文檔編號
    <2>instanceof運算符用法
  • 運算符是雙目運算符,左面的操做元是一個對象,右面是一個類.當左面的對象是右面的類建立的對象時,該運算符運算的結果是true,不然是false 。

代碼託管

(statistics.sh腳本的運行結果截圖)

上週考試錯題總結

  • 下面哪些Linux命令能夠ASCII碼和16進制單字節方法輸出Hello.java的內容?(BC)
    A . od -b -tx1 Hello.java
    B . od -tcx1 Hello.java
    C . od -tc -tx1 Hello.java
    D . od -tbx1 Hello.java

  • JDK8 中新時間API中,用於度量時間的類有(BC)
    A . Instant
    B . Duration
    C . Period
    D . LocalDateTime

Which of the following method headers is most likely a header for a mutator method?(如下哪一個方法頭部最有多是設值方法的頭部?)(D)
A . public int getAge()
B . public double computeSalary()
C . public Person()
D . public void setAge(int newAge)
E . none of these are headers for a mutator method(以上均不是設值方法的頭部)

結對及互評

評分標準

  1. 正確使用Markdown語法(加1分):
    • 不使用Markdown不加分
    • 有語法錯誤的不加分(連接打不開,表格不對,列表不正確...)
    • 排版混亂的不加分
  2. 模板中的要素齊全(加1分)
    • 缺乏「教材學習中的問題和解決過程」的不加分
    • 缺乏「代碼調試中的問題和解決過程」的不加分
    • 代碼託管不能打開的不加分
    • 缺乏「結對及互評」的不能打開的不加分
    • 缺乏「上週考試錯題總結」的不能加分
    • 缺乏「進度條」的不能加分
    • 缺乏「參考資料」的不能加分
  3. 教材學習中的問題和解決過程, 一個問題加1分

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

  5. 本週有效代碼超過300分行的(加2分)
    • 一週提交次數少於20次的不加分
  6. 其餘加分:
    • 週五前發博客的加1分
    • 感想,體會不假大空的加1分
    • 排版精美的加一分
    • 進度條中記錄學習時間與改進狀況的加1分
    • 有動手寫新代碼的加1分
    • 課後選擇題有驗證的加1分
    • 代碼Commit Message規範的加1分
    • 錯題學習深刻的加1分
    • 點評認真,能指出博客和代碼中的問題的加1分
    • 結對學習狀況真實可信的加1分
  7. 扣分:
    • 有抄襲的扣至0分
    • 代碼做弊的扣至0分
    • 遲交做業的扣至0分

點評模板:

  • 博客中值得學習的或問題:
    • xxx
    • xxx
    • ...
  • 代碼中值得學習的或問題:
    • xxx
    • xxx
    • ...
  • 基於評分標準,我給本博客打分:XX分。得分狀況以下:xxx

  • 參考示例

點評過的同窗博客和代碼

辜彥霖

邵煜楠

黃斐

劉高樂

譚宏璐

虎光元

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

本週內容較多,主要包括瞭解NIO,會使用Channel、Buffer與NIO2,會使用日誌API、國際化,會使用正則表達式,瞭解JDK8加強功能等等。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 20篇 200小時
第一週 8/10 1/4 8/10 編寫第一個Java程序HelloWorld
第二週 79/89 1/5 11/21 學習Java基礎語法
第三週 249/338 1/6 16/37 學習Java關於對象的重要知識
第四周 331/669 1/7 17/54 學習Java關於繼承、接口與多態的重要知識
第五週 507/1176 1/8 18/72 學習Java的異常處理、Collection與Map
第六週 1321/2497 1/9 16/88 學習Java的輸入、輸出與線性、並行API
第七週 678/3175 2/11 18/106 學習Java的Lambda、時間與日期
第八週 358/3533 1/12 18/124 學習Java的NIO與NIO二、通用API

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

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

  • 計劃學習時間:20小時

  • 實際學習時間:18小時

  • 改進狀況:學習時間比上週多,主要花費時間去使用,複習知識。

(有空多看看現代軟件工程 課件
軟件工程師能力自我評價表
)

參考資料

相關文章
相關標籤/搜索