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


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


教材學習內容總結

  • 第十章 輸入/輸出

    • 字節輸入類:
    1. Java將輸入/輸出抽象化為串流,數據有來源及目的地,銜接兩者的事串流對象。從應用程序角度來看,將數據從來源取出,使用輸入串流java.io.InputStream;如果將數據寫入目的地,可以使用輸出串流java.io.OutputStream

    2. 串流繼承架構

    3. ObjectInputStream提供readObject()方法將數據讀入為對象,而ObjectOutputStream提供writeObject()方法將對象寫至目的地。

    • 字符輸入類:
    1. 針對字符數據的讀取,Java SE提供了 java.io.Reader類,抽象化了字符數據讀入的來源;
      針對字符數據的寫入,提供了java.io.Writer
      ,抽象化了數據寫出的目的地。
    2. 就裝飾器的作用而言,
      InputStreamReader
      System.in讀入的字節數據做編碼轉換,而BufferedReader將編碼轉換后的數據做緩沖處理,以增加讀取效率。
  • 第十一章 線程與並行API

    • 線程
    1. 單線線程程序就是自啟動的程序從main()程序進入點開始至結束只有一個流程。多線程:在同一應用程序中,有多個流程被同時執行。
    2. 線程生命周期:調用Thread實例start()方法后,基本狀態為可執行(Runnable)、被阻斷(Blocked)、執行中(Running)。
    • 並行API
    1. 使用Thread建立多線程程序,必須親自處理synchronized、對象鎖定、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;
    }

編譯通過。

代碼托管

上周考試錯題總結

  • 現有:
    1. import java.util.*;
      2.
    2. Class FindStuff {
      4.public static void main (String[]args) {
      5, //insert code here
      6. c.put ("X", 123);
      7. }
    3. }

分別插入到第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分。得分情況如下:

    1. 正確使用Markdown語法:加1分
    2. 模板中的要素齊全:加1分
    3. 代碼調試中的問題和解決過程:加1分
    4. 感想,體會不假大空:加1分
    5. 排版精美:加1分
    6. 進度條中記錄學習時間與改進情況:加1分
    7. 錯題學習深入:加1分

    博客中值得學習的或問題:參考搭檔的教材內容總結,對前兩章的學習又有了新的理解。

    代碼中值得學習的或問題:對照搭檔的問題,我修改了自己的代碼,程序成功編譯。

  • 小組:

    基於評分標准,我給本博客打分: 9分。得分情況如下:

    1. 正確使用Markdown語法:加1分
    2. 教材學習中的問題和解決過程,:加1分
    3. 代碼調試中的問題和解決過程,:加2分
    4. 本周有效代碼超過300分行:加2分
    5. 排版精美的加1分
    6. 進度條中記錄學習時間與改進情況的加1分
    7. 有動手寫新代碼的加1分

    博客中值得學習的或問題:該同學的標題寫錯了,應該是2016-2017學期

    基於評分標准,我給本博客打分:3分。得分情況如下:

    1. 錯題學習深入:加1分
    2. 教材中的問題和解決過程:加2分

    基於評分標准,我給本博客打分:9分。得分情況如下:

    1. 正確使用Markdown語法:加1分
    2. 模板中的要素齊全:加1分
    3. 教材學習中的問題和解決過程:加1分
    4. 本周有效代碼超過300分行的:加2分
    5. 排版精美:加1分
    6. 進度條中記錄學習時間與改進情況:加1分
    7. 有動手寫新代碼:加1分
    8. 錯題學習深入:加1分

    基於評分標准,我給本博客打分:8分。得分情況如下:

    1. 正確使用Markdown語法:加1分
    2. 模板中的要素齊全:加1分
    3. 教材學習中的問題和解決過程:加1分
    4. 感想,體會不假大空:加1分
    5. 排版精美:加一分
    6. 進度條中記錄學習時間與改進情況:加1分
    7. 有動手寫新代碼:加1分
    8. 代碼Commit Message規范:加1分

點評過的同學博客和代碼

感悟與思考

這周正好趕上清明節放假,因為時間安排,提前兩天完成任務。當然時間不夠充裕,也許學習過程中有落下的部分,課后會仔細看看書。這周代碼量更多了,一點一點敲確實有點繁冗枯燥,但是我相信再經過深入學習,會有一天把寫代碼看作跟日常吃飯睡覺一樣平常。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
第六周 1761/3365 1/1 15/92
  • 計划學習時間:17小時

  • 實際學習時間:15小時

  • 改進情況:這周沒達到學習目標,本來想周六仔細看看書,但是周六白天上課,只好晚上再加班。

參考資料


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM