20155201 2016-2017-2 《Java程序設計》第六周學習總結
教材學習內容總結
-
第十章 輸入/輸出
- 字節輸入類:
-
Java將輸入/輸出抽象化為串流,數據有來源及目的地,銜接兩者的事串流對象。從應用程序角度來看,將數據從來源取出,使用輸入串流
java.io.InputStream
;如果將數據寫入目的地,可以使用輸出串流java.io.OutputStream
。 -
串流繼承架構
-
ObjectInputStream
提供readObject()
方法將數據讀入為對象,而ObjectOutputStream
提供writeObject()
方法將對象寫至目的地。
- 字符輸入類:
- 針對字符數據的讀取,Java SE提供了
java.io.Reader
類,抽象化了字符數據讀入的來源;
針對字符數據的寫入,提供了java.io.Writer
類
,抽象化了數據寫出的目的地。 - 就裝飾器的作用而言,
InputStreamReader
將
System.in
讀入的字節數據做編碼轉換,而BufferedReader
將編碼轉換后的數據做緩沖處理,以增加讀取效率。
-
第十一章 線程與並行API
- 線程
- 單線線程程序就是自啟動的程序從
main()
程序進入點開始至結束只有一個流程。多線程:在同一應用程序中,有多個流程被同時執行。 - 線程生命周期:調用
Thread
實例start()
方法后,基本狀態為可執行(Runnable)、被阻斷(Blocked)、執行中(Running)。
- 並行API
- 使用Thread建立多線程程序,必須親自處理syn
chronized
、對象鎖定、wait()
、notify()
、notifyAll()
等細節。
教材學習中的問題和解決過程
- 問題1:在學習死結部分時,編譯運行P343 DeadLockDemo.java代碼,有時發生死結,有時不發生:
- 問題1解決方案:書上的解釋是這樣:發生死結的原因在於,
thread1
在調用resource1.corportate(resource2)
時,會取得r1
的鎖定,若此時thread2
也正好調用resource2.corportate(resource1)
,取得r2
的鎖定,湊巧thread1
現在打算運用傳入的r2
調用doSome()
,理應取得r2
的鎖定,但鎖定現在被t2
拿走了,於是t1
進入阻斷,而t2
也打算運用傳入的r1
調用doSome()
,理應取得r1
的鎖定,但鎖定現在是t1
取走,於是t2
進入等待。 - 問題2:之前第四章的課后題中有輸出斐波那契數列的題,我自己編的代碼是這樣:
沒有調用函數,只是用了數組。
int[] fb=new int[num];
fb[0]=0;
fb[1]=1;
int i=0;
for(i=0;i<num;i++){
if(i>1){
fb[i]=fb[i-1]+fb[i-2];
}
- 問題2解決方案:書上輸出斐波那契數列選擇的方法是遞歸調用函數:
static long fibonacci(long n) {
if (n <= 1) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
代碼調試中的問題和解決過程
-
問題1:在編譯P315代碼時,出現了問題:
-
問題1解決方案:發現書上省略了定義get、set的方法,補全代碼如下
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
編譯通過。
代碼托管
上周考試錯題總結
- 現有:
- import java.util.*;
2. - Class FindStuff {
4.public static void main (String[]args) {
5, //insert code here
6. c.put ("X", 123);
7. } - }
- import java.util.*;
分別插入到第5行,哪幾行允許代碼編譯?
A .Map c= new SortedMap();
B .HashMap c= new HashMap();
C .HashMap c= new Hashtable();
D .SortedMap c= new TreeMap();
E .ArrayList c= new ArrayList();
F . Map c = new LinkedHashMap();
答案:BDF
結對及互評
-
結對:
基於評分標准,我給本博客打分:8分。得分情況如下:
- 正確使用Markdown語法:加1分
- 模板中的要素齊全:加1分
- 代碼調試中的問題和解決過程:加1分
- 感想,體會不假大空:加1分
- 排版精美:加1分
- 進度條中記錄學習時間與改進情況:加1分
- 錯題學習深入:加1分
博客中值得學習的或問題:參考搭檔的教材內容總結,對前兩章的學習又有了新的理解。
代碼中值得學習的或問題:對照搭檔的問題,我修改了自己的代碼,程序成功編譯。
-
小組:
基於評分標准,我給本博客打分: 9分。得分情況如下:
- 正確使用Markdown語法:加1分
- 教材學習中的問題和解決過程,:加1分
- 代碼調試中的問題和解決過程,:加2分
- 本周有效代碼超過300分行:加2分
- 排版精美的加1分
- 進度條中記錄學習時間與改進情況的加1分
- 有動手寫新代碼的加1分
博客中值得學習的或問題:該同學的標題寫錯了,應該是2016-2017學期
基於評分標准,我給本博客打分:3分。得分情況如下:
- 錯題學習深入:加1分
- 教材中的問題和解決過程:加2分
基於評分標准,我給本博客打分:9分。得分情況如下:
- 正確使用Markdown語法:加1分
- 模板中的要素齊全:加1分
- 教材學習中的問題和解決過程:加1分
- 本周有效代碼超過300分行的:加2分
- 排版精美:加1分
- 進度條中記錄學習時間與改進情況:加1分
- 有動手寫新代碼:加1分
- 錯題學習深入:加1分
基於評分標准,我給本博客打分:8分。得分情況如下:
- 正確使用Markdown語法:加1分
- 模板中的要素齊全:加1分
- 教材學習中的問題和解決過程:加1分
- 感想,體會不假大空:加1分
- 排版精美:加一分
- 進度條中記錄學習時間與改進情況:加1分
- 有動手寫新代碼:加1分
- 代碼Commit Message規范:加1分
點評過的同學博客和代碼
感悟與思考
這周正好趕上清明節放假,因為時間安排,提前兩天完成任務。當然時間不夠充裕,也許學習過程中有落下的部分,課后會仔細看看書。這周代碼量更多了,一點一點敲確實有點繁冗枯燥,但是我相信再經過深入學習,會有一天把寫代碼看作跟日常吃飯睡覺一樣平常。
學習進度條
代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
第六周 | 1761/3365 | 1/1 | 15/92 |
-
計划學習時間:17小時
-
實際學習時間:15小時
-
改進情況:這周沒達到學習目標,本來想周六仔細看看書,但是周六白天上課,只好晚上再加班。