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

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

教材學習內容總結

學習目標

  1. 瞭解NIO
  2. 會使用Channel、Buffer與NIO2
  3. 會使用日誌API、國際化
  4. 會使用正則表達式
  5. 瞭解JDK8加強功能

NIO與NIO2

  • NIO(New IO)-from JDK1.4
    • NIO用頻道銜接數據節點,在處理數據是,設定緩衝區容量,提供clear()、rewind()、flip()、compact()等方法。
    • Channel: 銜接數據節點
    • Buffer: 塊操做,直接子類都有一個allocate()靜態方法,容量大小能夠用capacity()取得。
  • NIO2 -from Java SE 7
    • java.nio.file
      • FileSystems
      • Paths
      • Files
    • java.nio.file.atribute
    • java.nio.file.spi
    • 用FileSystemProvider取得所需的操做對象,完成相應操做。

通用API

日誌API
  1. java.util.logging包提供了日誌功能相關類與接口,使用日誌的起點是logger類
  2. Logger類的構造函數標示爲protected
  3. 不是java.util.logging同包的類不能直接以new建立,必許使用Logger的靜態方法
  4. 沒法使用構造方法生成Logger對象
  5. 經過getParent()取得父Logger實例,經過getLevel()取得設定的Level實例,默認取得的Logger實例,層級必須大於或等於Logger.GLOBAL-LOGGER-NAME名稱空間logger實例設定的Level.INFO,纔可能輸出信息。Logger可經過setLevel()來設定Level實例建立:Logger logger = Logger.getLogger("cc.openhome.Main")取得:Logger logger = Logger.getLogger("Main.class.getName")
Handler、Formatter與Filter
  1. Handler:輸出介質,標準API提供了幾個操做類:
  • MemoryHandler不會格式化日誌信息,信息會暫存於內存緩衝區,直至超過大小纔將信息輸出至指定的目標Handler。
  • StreamHandler可自行指定信息輸出時使用的OutputStream。
  • ConsoleHandler建立時,會自動指定OutputStream爲System.err。
  • SocketHandler建立時能夠指定主機位置與端口。
  • addHandler()新增Handler實例,removeHandler()移除Handler實例
  1. Formatter: 格式化
  2. Filter: 過濾
國際化標準
  1. Localization 本地化;Internationalization(i18n)國際化
  2. ResourceBundle
  • 靜態getBundle()方法取得一個ResourceBundle的實例,所給定的自變量名稱是信息文檔的主文件名,getBundle()會自動找到對應的.properties文檔,用getString()指定鍵來取得
  1. Locale
  • 國際化的三個標準是地區(Locale)信息、資源包(Resource bundle)與基礎名稱(Base name)
正則表達式
  1. 用於字符、字符串格式比較,包含字面意義字符與元字符。
    • 字面意義字符是指按照字面意義比較的字符
    • 元字符是不按照字面意義比較的字符,在不一樣情境有不一樣意義的字符。
  2. String的split()方法會返回切割後各個子字符串組成的String數組
  3. {n},貪婪量詞,表示前面的量詞出現n次,會盡量找出長度最長的符合文字。
  4. 貪婪量詞?逐步量詞,找出長度最短的符合文字。
  5. 貪婪量詞+,獨吐量詞,沒有任何文字符合。
  6. 邊界比較
  7. Pattern與Matcher
    • java.util.regex.Pattern實例是規則表示式在JVM中的表明對象,Pattern的構造函數被標示爲private,必須經過Pattern的靜態方法compile()來取得。
    • 用matcher()方法指定要比較的字符串,這會返回java.util.regex.Matcher實例,表示對指定字符串的比較。
JDK8 API加強功能
  1. String新增join()靜態方法能夠指定每一個字符串間以逗號分隔進行鏈接。
  2. Arrays上新增parallelPrefix()、parallelSetAll()與parallelSort()方法.
  3. 對數組進行管線化操做:
    • 方法一是使用Arrays的asList()方法返回List,然後調用stream()方法取得Stream實例;
    • 另外一個方法是使用Arrays的stream()方法,能夠指定數組後返回Stream實例。
  4. CharSequence上新增了chars()和codePoints()方法,都是返回intStream。
  5. Math在JDK8中也新增了很多數學運行相關API。

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

本週教材問題均爲教學指導中的問題:html

  • 問題1:Logger/Level/Handler的關係
  • 解決方案:Java日誌緩存機制這篇博客對這個問題作了很好的解釋,總結以下:
  • Logger:日誌結構的基本單元。Logger 是以樹形結構存儲在內存中的,根節點爲 root.com.test(若是存在)必定是 com.test.demo(若是存在)的父節點,即前綴匹配的已存在的 logger 必定是這個 logger 的父節點。這種父子關係的定義,能夠爲用戶提供更爲自由的控制粒度。由於子節點中若是沒有定義處理規則,如級別 handler、formatter 等,那麼默認就會使用父節點中的這些處理規則。
  • Level:JDK 中定義了 Off、Severe、Warning、Info、Config、Fine、Finer、Finest、All 九個日誌級別,定義 Off 爲日誌最高等級,All 爲最低等級。每條日誌必須對應一個級別。級別的定義主要用來對日誌的嚴重程度進行分類,同時能夠用於控制日誌是否輸出。
  • Handler:用來處理 LogRecord,默認 Handler 是能夠鏈接成一個鏈狀,依次對 LogRecord 進行處理。
    java

  • 問題2:理解貪婪模式,非貪婪模式,獨佔模式
  • 解決方案:
    • 貪婪匹配:正則表達式通常趨向於最大長度匹配。
    • 非貪婪匹配:儘量就少的匹配字符。
    • 獨佔模式:同貪婪同樣匹配最長正則表達式儘量長地去匹配字符串,一旦匹配不成功就會結束匹配。
  1. 編程中如何區分兩種模式
    • 默認是貪婪模式;在量詞後面直接加上一個問號就是非貪婪模式。

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

本週代碼調試問題均爲教學指導中的問題:git

  • 問題1:p475 HandlerDemo.java: %h 從哪來的?還有什麼其餘模式字符串?
  • 解決方案:是程序配置操做記錄文件,(但是我沒找到本身電腦上的)%h表示代碼根目錄,%t表明系統暫存目錄,%g自動爲文檔編號
  • 問題2:SplitDemo.java修改代碼,字符串改爲csv,怎麼分隔?
  • 解決方案:修改代碼段以下:
for (String token:"csv".split("")){
   System.out.println(token);
}
  • 運行結果以下:
    正則表達式

  • c語言實現思路:
s[]={咱們輸入的字符串};
l=strlen(s);
for(i=0;i<l;i++){
    if(s[i]="分割條件")
        printf("\n");
    else
        printf("%s",s[i]);
}
  • 問題3:p491 PatternMatcherDemo.java中out.printf("%s find ", pattern.pattern())的做用?
  • 解決方案:用find將先後分開

代碼託管

代碼行數統計
編程

上週考試錯題總結

  • 錯題1:下面哪些Linux 命令能夠ASCII碼和16進制單字節方法輸出Hello.java的內容?
  • A .od -b -tx1 Hello.java
  • B .od -tcx1 Hello.java
  • C .od -tc -tx1 Hello.java
  • D .od -tbx1 Hello.java
  • 正確答案: B C
  • 解析:-b 是以八進制輸出
  • 錯題2:JDK8中的Lambda表達式有如下好處:
  • A .消除重複性
  • B .提升性能
  • C .提升安全性
  • D .改善可讀性
  • 正確答案: A D
  • 分析:我沒注意是多選題,少選了A選項
  • 錯題3:JDK8 中新時間API中,用於度量時間的類有()
  • A .Instant
  • B .Duration
  • C .Period
  • D .LocalDateTime
  • 正確答案: B C
  • 錯題4:A ________________ diagram helps us visualize the contents of and relationships among the classes of a program(___有助於咱們查看程序中類的內容和它們之間的關係).
  • A .class and object(類和對象)
  • B .UML(UML類圖)
  • C .object-oriented(面向對象)
  • D .public
  • E .private
  • 正確答案: B
  • 錯題5:__________________ parameters are the values that are used when calling a method(___參數是調用方法時傳給方法的值).
  • A .formal(形式參數)
  • B .actual(實際參數)
  • C .useful(有用的參數)
  • D .informal(非正式參數)
  • E .none of the above(以上都不是)
  • 正確答案: B
  • 錯題6:An object can be thought of as a blueprint for a set of classes(對象被認爲是類集合的藍圖).
  • A .true
  • B .false
  • 解析:類能夠被看做是一組對象的藍圖,而不是另外一種方式。
  • 錯題7:Which of the following objects could contain the information 「eastern standard time」?(下面哪些類的對象會包含「東部標準時間」的信息)
  • (Choose all that apply.)
  • A .Instant
  • B .LocalDate
  • C .LocalDateTime
  • D .LocalTime
  • E .ZonedDateTime
  • 正確答案: E
  • 錯題8:What is the output of the following code?(下面代碼的運行結果是?)
LocalDate date = LocalDate.of(2018, Month.APRIL, 30);
date.plusDays(2);
date.plusYears(3);
System.out.println(date.getYear() + " "+
 date.getMonth() + " "+ date.getDayOfMonth());
  • A .2018 APRIL 2
  • B .2018 APRIL 30
  • C .2018 MAY 2
  • D .2021 APRIL 2
  • E .2021 APRIL 30
  • F .2021 MAY 2
  • G .A runtime exception is thrown.
  • 正確答案: B
  • 解析:日期開始爲2018年4月30日。由於日期是不可變的,加上方法忽略返回值,結果不變。所以,選項B是正確的。
  • 錯題8:What is the output of the following code?(下面代碼的運行結果是?)
LocalDate date = LocalDate.of(2018, Month.APRIL, 40);
System.out.println(date.getYear() + " " + date.getMonth()
+ " "+ date.getDayOfMonth());
  • A .2018 APRIL 4
  • B .2018 APRIL 30
  • C .2018 MAY 10
  • D .Another date
  • E .The code does not compile.
  • F .A runtime exception is thrown.
  • 正確答案:F
  • 解析:若是無效的日期值經過,則引起異常。沒有第四十天四月或任何其餘月份

結對及互評

點評過的同窗博客和代碼

  • 本週結對學習狀況
    • 20145226
    • 結對照片
      api

    • 結對學習內容
      • 學習partner的代碼並做出點評
      • 學習partner的博客和本身的博客作對比,找出不足
  • 上週博客互評狀況

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

由於週末有其餘事情,這周Java的學習時間提早了不少,不拖到週末學習反而感到內心輕鬆不少,果真週末就是不適合學習!可是發現不少前面的知識都還沒徹底掌握,這將是將來學習須要努力的地方。數組

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 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收集對象
第六週 754/2818 1/6 6/82 瞭解串流和線程
第七週 679/3493 2/8 5/87 瞭解時間與日期,掌握Date和Calendar的一些用法
第八週 352/3845 1/9 8/95 瞭解並會使用通用API
  • 計劃學習時間:6小時緩存

  • 實際學習時間:8小時安全

參考資料

相關文章
相關標籤/搜索