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

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

教材學習內容總結

  • 在NIO中有幾個比較關鍵的概念:Channel(通道),Buffer(緩衝區),Selector(選擇器)。html

  • 這些是Java NIO中最重要的通道的實現:java

    FileChannelgit

    DatagramChannelgithub

    SocketChannelapi

    ServerSocketChannel安全

  • 使用Buffer讀寫數據通常遵循如下四個步驟:oracle

    寫入數據到Bufferapp

    調用flip()方法函數

    從Buffer中讀取數據性能

    調用clear()方法或者compact()方法

  • 爲了理解Buffer的工做原理,須要熟悉它的三個屬性:

    capacity

    position

    limit

  • capacity

做爲一個內存塊,Buffer有一個固定的大小值,也叫「capacity」.你只能往裏寫capacity個byte、long,char等類型。一旦Buffer滿了,須要將其清空(經過讀數據或者清除數據)才能繼續寫數據往裏寫數據。

  • position

當你寫數據到Buffer中時,position表示當前的位置。初始的position值爲0.當一個byte、long等數據寫到Buffer後, position會向前移動到下一個可插入數據的Buffer單元。position最大可爲capacity – 1.

當讀取數據時,也是從某個特定位置讀。當將Buffer從寫模式切換到讀模式,position會被重置爲0. 當從Buffer的position處讀取數據時,position向前移動到下一個可讀的位置。

  • limit

在寫模式下,Buffer的limit表示你最多能往Buffer裏寫多少數據。 寫模式下,limit等於Buffer的capacity。

當切換Buffer到讀模式時, limit表示你最多能讀到多少數據。所以,當切換Buffer到讀模式時,limit會被設置成寫模式下的position值。換句話說,你能讀到以前寫入的全部數據(limit被設置成已寫數據的數量,這個值在寫模式下就是position)

  • 從Buffer中讀取數據有兩種方式:

    從Buffer讀取數據到Channel。

    使用get()方法從Buffer中讀取數據。

  • Path
    這個類在java.nio.file,在NIO裏對文件系統進行了進一步的抽象。 是用來替換原來的java.io.File。其中 FileSystems, Files, Path, PathMatcher 成爲一個體系。

  • 在java7裏File和Path能夠相互轉換: File.toPath(), Path.toFile()
    原來的File裏包含了文件引用和文件,在Path系統裏, Path裏是文件的引用,而文件操做都放到了Files的靜態方法裏。這種方式究竟好很差用,我沒啥感受。不過我跟人偏向於把操做放到另一個類裏面。

  • java.nio.file.attribute包下的類提供了獲取文件屬性的類,針對不一樣操做系統使用的類不太同樣,固然也有全部操做系統通用的屬性。

屬性分類有一些幾種:
BasicFileAttributeView

DosFileAttributeView

PosixFileAttributeView

FileOwnerAttributeView

AclFileAttributeView

UserDefinedFileAttributeView

  • 使用ResourceBundle時,如何根據基礎名稱取得對應的信息文檔:

    1.使用指定的Locale對象取得信息文檔。

    2.使用Locale。getDefault()取得的對象取得信息文檔。

    3.使用基礎名稱取得信息文檔。

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

  • 問題1:若是api文檔查不到某個類的用法 咱們應該去哪裏查詢
  • 問題1解決方案:java api通常不都是一些代碼示例加說明嗎?http://docs.oracle.com/javase/7/docs/api/ 這個是javase7的api
    百度java api 查到的就是啊,可能有的沒有中文,這個一個是能夠上網留意有沒有中文的,可是由於翻譯問題,中文的api相對陳舊,因此建議提升本身的英文能力,閱讀官方api
    第三方的類通常會寫在源碼裏,或者實在github上,或者是寫在wiki裏。你在工程裏添加響應的源碼而後按ctrl+左鍵,查看源碼是怎麼寫的就能夠。

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

  • 問題1:

    class MyClass<E>
              {
              public <T> MyClass(T t)
              {
              System.out.println("t參數的值爲:" + t);
              }
              }
              public class GenericDiamondTest
              {
              public static void main(String[] args)
              {
              MyClass<String> mc1 = new MyClass<>(5); 
              MyClass<String> mc2 = new <Integer> MyClass<String>(5); 2
              //  MyClass<String> mc3 = new <Integer> MyClass<>(5); 3
              }
              }
    2處MyClass究竟是String仍是Integer ,這麼表示怎麼理解?3處的代碼爲何不對啊?
  • 問題1解決方案:2處,MyClass固然是String,只不過它的構造函數參數Integer。
    3處,錯誤是,當調用new時,不能用 來顯示指定類型信息,這個由編譯器推導。

代碼託管


上週考試錯題總結

  • 下面哪些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

  • JDK8中的Lambda表達式有如下好處:
    A .
    消除重複性
    B .
    提升性能
    C .
    提升安全性
    D .
    改善可讀性

正確答案: A D

  • JDK8 中新時間API中,用於度量時間的類有()

A .
Instant
B .
Duration
C .
Period
D .
LocalDateTime

正確答案: B C

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

A .
static
B .
final
C .
public
D .
private
E .
none of the above(以上都不是)
正確答案: D

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

  • An object can be thought of as a blueprint for a set of classes(對象被認爲是類集合的藍圖).
  • A .
    true
    B .
    false
    正確答案: B

  • 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

  • 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()
正確答案: F

  • 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

結對及互評

評分標準

  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

  • 參考示例

點評過的同窗博客和代碼

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

本週學習的兩章知識較爲簡單,但須要和以前學習的內容基礎結合起來,因此前面的基礎很重要,在學習過程當中我不斷翻閱前面知識,結合起來學習會使效率提升。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 20/20 2/2 20/20
第二週 140/160 2/4 18/38
第三週 113/273 1/5 20/58
第四周 335/608 1/6 20/78
第五週 1159/1408 1/7 30/108
第六週 452/1860 1/8 20/128
第七週 343/2203 1/9 30/158
第八週 448/2651 1/10 20/178
相關文章
相關標籤/搜索