20155207 2016-2017-2 《Java程序設計》第八週學習總結

20155207 2016-2017-2 《Java程序設計》第八週學習總結

教材學習內容總結

第15章 通用API

15.1 日誌

15.1.1 日誌API簡介
  • java.util.loggging包提供了日誌功能相關類與接口
  • 使用日誌的起點是Logger類,Logger類的構造函數表示爲protected,不是java.util.logging同包的類不能直接以new建立,取得Logger實例,必須用Logger的靜態方法getLogger()
  • 調用getLogger()時必須指定Logger實例所屬空間名稱,以 . 區分層級,名稱空間層級相同的Logger,其父Logger組態相同
  • 類以後接.class,可取得該類的java.lang.class實例,調用其getName()就能夠取得類全名
  • 取得Logger實例以後,能夠使用Log()方法輸出信息,輸出信息時能夠使用Level的靜態成員指定信息層級
  • 要輸出的信息,必須先經過Logger的Level與Filter過濾,再經過Handler的Level和Filter過濾,格式化信息的動做交給Formatterhtml

    15.1.2 制定日記層級
  • Level若是沒作任何修改,取得的Logger實例之父Logger組態,Level默認是Logger.GLOBAL_LOGGER_NAME(INFO)名稱空間Logger實例的組態,Handler默認是ConsoleHandler
  • Logger實例的getParent()取得父Logger實例,getlevel()取得設定的Level實例
  • Logger實例的層級必須大於或等於父Logger的Level
  • 可經過Logger的setLevel()設定層級,可用Level內建幾個靜態成員來指定
  • 使用intVlue()取得內含int值
  • log()時指定的Level實例內含的int值小於Logger設定的Level實例內含的int值,Logger就不會記錄信息
  • Level.OFF用於關閉全部信息輸出,Level.ALL用於容許全部信息輸出
  • 一個Logger能夠有多個Handler,經過addHandler()removeHandler()新增、移除Handler實例
  • getHandlers()方法來取得目前已有的Handler實例數組
  • Handler能夠經過setLevel()設定信息
  • 一些日誌層級,Logger有其對應的簡便方法java

    15.1.3 使用Handler與Formatter
  • MemoryHandler(信息存在緩衝區,超出緩衝區大小)、StreamHandler(可自動指定OutputStream實例)、ConsoleHandler(日誌信息會顯示在控制檯上)、FileHandler(創建日誌輸出時使用的FileOutputStream)、SocketHandler(聯網,將日誌信息傳至指定主機)
  • addHandler()removeHandler()新增、移除Handler
  • 創建FileHandler指定模式字符串,「%h」表示用戶根目錄,「%t」取得系統暫存目錄,「%g」自動爲文檔編號
  • Logger的Config()是個簡便方法,能夠直接Level.CONFIG層級輸出信息,也有severe()info()等簡便方法
  • 調用Logger實例的setUseParentHandlers()設定爲false,日誌不會傳播給父Logger,使用setParent()方法指定父Loggergit

    15.1.4 自定義Handler、Formatter與Filter
  • java.util.logging包中提供的Handler成果都不符合需求,繼承Handler類,操做抽象方法publish()flush()close()方法來定義Handler,操做時考慮信息過濾與格式化
  • 自定義Formatter,繼承Formatter後操做抽象方法format(),傳入LogRecord,儲存全部日誌信息api

    15.1.5 使用logging.properties
  • 經過logging.properties來設定Logger組態,修改.properties後另存至程序CLASSPATH中,指定java.util.logging.cofig.file系統屬性爲.properties名稱數組

    15.2 國際化基礎

    15.2.1 使用ResourceBundle
  • 使用ResourceBundle作信息綁定,準備.properties文檔並放在CLASSPATH的路徑設定下,文件中撰寫鍵/值配對
  • ResourceBundle的靜態getBundle()方法會取得一個ResourceBundle實例,給定自變量名稱是信息文檔的主文件名,取得實例後用getString()指定鍵取得文檔中對應值app

    15.1.2 使用Locale
  • 國際化三個重要概念:地區(Locale)信息、資源包(Resource bundle)與基礎名稱(Base name)
  • 地區可由一個語言編碼與可選的地區編碼來指定
  • 地區信息對應類是Locale,創建Locale實例時,可指定語言編碼與地區編碼
  • 資源包中包括了特定地區的相關信息
  • 將Unicode編碼表示的.properties轉回中文,使用-reverse自變量函數

    15.3 規則表達式

    15.3.1 規則表達式簡介
  • String的spilt()方法,返回切割後各子字符串組成的String數組
  • 規則表達式基本包括兩種字符:字面意義字符與元字符
  • 1.字面意義字符
    • 字母或數字:比較字母或數字
    • \:比較
  • 2.字符類
    • 任一個字符切割:[]
    • 連字符—:表示從...到...
    • 反字符^:表示除...之外的字符
    • 預約義字符
  • 3.貪婪、逐步、獨吐量詞
    • 貪婪量詞:{n}是貪婪量詞表示法的一種,貪婪量詞會盡量的找到長度最長的符合文字
    • 逐步量詞:在貪婪量詞表示法後加上?,會成爲逐步量詞(懶惰量詞,非貪婪量詞),會找到長度最短的符合文字
    • 獨吐量詞:在貪婪量詞表示法後加上+,會成爲獨吐量詞,將剩餘文字吃掉,而後看看獨吞量詞部分是否符合吃下的文字,若是符合就不會再吐出來了
    • replaceAll()會將符合規則表達式的字符串取代後返回新字符串
  • 4.邊界比較
    • 邊界比較用來表示文字必須符合指定的邊界條件(定位點)
  • 5.分組與參考
    • 使用()將規則表達式分組,被分組的規則表達式能夠在稍後回頭參考學習

      15.3.2 Pattern與Matcher
  • java.util.Regex.Pattern實例是規則表達式在JVM中的表明對象,Pattern的構造函數被標示爲private,沒法用new建立Pattern實例,必須經過Pattern的靜態方法compile()來取得
  • 取得Pattern實例後,能夠使用mather()方法將指定字符串依規則表達式切割
  • 使用matcher()方法指定要比較的字符串,find()方法看是否是有下一個符合字符串,lookingAt()看字符串開頭是否符合規則表達式,group()方法返回符合的字符串
  • 規則表達式中有分組,group()能夠接受int整數指定分數計數(1-...),group(0)至關於group()
  • replaceAll()方法,將符合規則表達式的部分以指定的字符串替代,replaceFirst()replaceEnd()分別可取代首個、最後反符合規則表達式部分,start()方法可取得符合字符串的起始索引,end()取得符合字符串最後一個字符後的索引編碼

    15.4 JDK8 API加強功能

    15.4.1 StringJoiner、Arrays新增API
  • 1.String.join()、StringJoiner
    • String上有join()靜態方法能夠指定每一個字符串間以什麼間隔
    • Collectors上有joining()靜態方法
  • 2.Arrays
    • paralleSort()方法能夠將指定的數組分爲子數組並以平行化方式分別排序,而後再進行合併排序.net

      15.4.2 Stream相關API
  • 對數組進行管線化操做
    • 使用ArraysasList()方法返回List,然後調用stream()方法取得stream實例
    • 使用Arraysstream()方法,能夠指定數組後返回Stream實例

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

  • 問題:p471LoggerDemo爲何不會輸出Level.CONFIG和Level.FINE的信息
  • 解決過程:結合P472圖示與P473講解,得知Logger的層級必須大於等於父Logger,才能將信息輸出至控制檯,Logger層級默認爲INFO,Level.CONFIG和Level.FINE都小於INFO,因此不會輸出

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

本週代碼調試沒有問題

代碼託管

上週考試錯題總結

  • 錯題1:vi中哪條命令是不保存強制退出?
    A .:wq

B .:wq!

C .:q!

D .:q

理解狀況 C.:wq 是保存退出。 !表示強制。

  • 錯題2:hen applied to instance variables, the ________________ visibility modifier enforces encapsulation(當應用到實例變量時,____可見性修飾符強制執行封裝).
    A .static

B .final

C .public

D .private

E .none of the above(以上都不是)

  • 錯題3:Given the following, which answers can correctly fill in the blank? (Choose all that apply.)針對下面的代碼,()中應填入哪一個選項?
    LocalDate date = LocalDate.now();
    LocalTime time = LocalTime.now();
    LocalDateTime dateTime = LocalDateTime.now();
    ZoneId zoneId = ZoneId.systemDefault();
    ZonedDateTime zonedDateTime = ZonedDateTime.of(dateTime, zoneId);
    long epochSeconds = 0;
    Instant instant = ( );
    A .Instant.now()

B .Instant.ofEpochSecond(epochSeconds)

C .date.toInstant()

D .dateTime.toInstant()

E .time.toInstant()

F .zonedDateTime.toInstant()

結對及互評

評分標準

  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
    • ...

點評過的同窗博客和代碼

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

學習了將系統運行記錄到日誌的方法,經過日誌的層級關係,結合了繼承的知識,更深的理解了父類和子類的關係,還學習了國際化標準和規則表達式

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 0/0 2/2 20/20
第二週 186/186 2/4 18/38
第三週 689/875 3/7 22/60
第四周 242/1117 2/9 30/90
第五週 698/1815 2/9 30/120
第六週 1269/3084 2/9 30/120
第七週 342/3426 2/9 30/120
第八週 398/3824 2/9 30/120

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

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

  • 計劃學習時間:24小時

  • 實際學習時間:23小時

  • 改進狀況:

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

參考資料

相關文章
相關標籤/搜索