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


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

課堂內容總結

  • read()每次讀入一個字節。
    • eg:short2個字節,2=0x0201,讀入后要0x << 8 | 0x01才能正確讀數。
  • DataInputStream——高級流(過濾流):readDouble(),readFloat()...
  • 字節流:二進制
  • 文本流:文本
  • od -tx1 Test.java用十六進制查看代碼,"1"代表一個字節。
  • od -tx1 -tc Test.java顯示出對應的原代碼。
  • 字符在硬盤上占一個字節,在內存“流”中占兩個字節。漢字在硬盤、內存中都占兩個字節。
  • 文本(.txt)中12345678占幾個字節?——7個
    ;在二進制文件(.bin)中占3個字節——12D678;
  • 字符串轉換成整數型:Integer.parseInt(...)
  • 數字轉換成字符串:1234567+""
  • C語言中數字轉換成字符串:fprintf或atoi
  • java是第一個語言支持多線程。
  • 注意區分類設計者和類使用者的不同。
  • time ./run HelloTest查看運行時間。
  • main有一個主線程。
  • 操作系統中的“並發控制”:多線程的結果不同;“生產者消費者問題”;“哲學家問題”。
  • 注意看父類中的方法;注意構造方法“Constructor Summary”;

教材學習內容總結

  • 時間的度量
    • GMT(Greenwich Mean Time)時間:現在不是標准時間
    • 世界時(Universal Time,UT):1972年UTC出來之前,UT等價於GMT
    • 國際原子時(TAI):秒的定義
    • 世界協調時間(Corrdinated Universal Time, UTC): 閏秒
    • Unix時間: 1970.1.1 00:00:00開始的秒數
    • epoch: java.util.Date epoch毫秒數
  • 時區
    • Date與DateFormat
      • Date只用來獲取epoch毫秒數
        • 兩個構造函數:1.使用epoch毫秒叔構建Date date1=new Date(currentTimdMillis());2.無自變量構造函數 Date date2=new Date();
        • 兩個方法:1.getTime()2.setTime()[3.toString()不建議使用]
      • DateFormat來格式化成人類理解的年月日時分秒
        • java.text.Date:抽象類,操作類:java.textSimpleDateFormat
        • 靜態方法:1.getDataInstance()2.getTimeInstance()3.getDateTimeInstance()
        • 格式參數getDataInstance()等三個方法中的1.LONG2. SHORT3.MEDIUM
        • SimpleDateFormat:方法parse()將指定字符串剖析為Date實例。
    • Calendar: 時間的運算
      • getInstance(): 默認取得GregorianCalendar(Calendar的子類)實例。
      • getTime():獲取Date實例
      • get():取得年月日等時期時間字段(指定字段枚舉常數:Calendar.YEAR, ~.MONTH, ~.DATE)注意:get(Calendar.MONTH比正常值小1)
      • set():設定日期
      • add():正數為加,負數為減;eg:calendar.add(Calendar.YEAR,-2);
      • roll():只對某個字段加減(其他字段不變)
      • after():比較是否在某個日期后
      • before():比較是否在某個日期前
      • clone():復制
      • setTimeZone():對某個Calendar實例設定TimeZone
      • getDefault():java.util.TimeZone的方法。其中定義的其他方法:1.getDisplyName()2.時區IDgetID()3.日光節約時數getDSTSavings()4.偏移毫秒數getRawOffset()
      • getTimeZone("ID字符串"):java.util.TimeZone的方法
      • getAvailableIDs():取得可使用的ID
  • 機器時間 Instant:與Date相互轉換:toInstant()->Instant和from()->Date;
    • now():取得Instant實例
    • ofEpochMilli():指定毫秒數
    • ofEpochSecond():指定秒數
    • 時間軸上的運算:plusSeconds(),plusMillis(),plusNanos(),minusSeconds(),minusMillis(),minusNanos();不改變Instant實例的值,而是返回新的實例。
  • 人類時間(ISO8601 標准)
    • LocalDateTime:不具時區的日期與時間
    • LocalDate:不具時區的日期
      • 方法:plusDays(),plusMonths(),plusWeeks()
    • LocalTime:不具時區的時間
    • ZonedDateTime:根據時區自動更正時間
    • OffsetdateTime:UTC偏移量
    • Year:ordinal():獲取enum定義時序;getValue():獲取月份對應數字
    • YearMonth
    • Month
    • MonthDay
    • TemporalAmount:操作類->Period,Duration
      • ofPattern()是java,time.format.DateaTimeFormatter的靜態方法,eg:...format(ofPattern("自定義格式"))
      • Period類:ofDays(),ofMonths(),ofWeeks()返回Period實例
    • TemporalUnit
    • TemporalAccessor
    • Chronology

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

  • 問題一:awt中各種類與方法的關系是什么?
    解決方法:結合API將常用類和方法總結如下:
  • 開發窗口應用程序
    • AWT
      • java.awt.Component
        • java.awt.Container(可容納Component)
          • java.awt.Window
            • java.awt.Dialog
            • java.awt.Frame
          • java.awt.Panel
        • Button
        • Label
        • TextComponent
      • java.awt.MenuComponent
        • MenuBar
        • MenuItem
    • JFC/Swing(主要學習對象,基於AWT)
  • 發現舊版書的第13章是窗口設計,新版書是時間與日期orz......
  • 問題二:書P432CurrentTime.java文件中dateFormat.format(new Date())是調用了怎樣的方法?
  • 解決:newDate()是在獲取當前的毫秒數,.format()是將后面的實例格式化為指定格式。
  • 問題三:System.currentTimeMillis()的結果與getTime()獲取的浩渺數為什么相差1呢?
    程序截圖:(添加打印System.currentTimeMillis())

結果截圖:

  • 解決方案:查看currentTimeMillisAPI截圖如下:currentTimeMillis返回值代表1970年1月1日0時0分0秒0毫秒至今經過的毫秒數。顯示的1毫秒差應該是程序執行消耗的時間。

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

  • 問題1:在編譯書中P430的DataFormatDemo.java時,出現錯誤,截圖如下:

  • 解決方案: 檢查代碼發現已經聲明了public class DateFormatDemo,不知道為什么編譯出錯。老師在教學指導中讓好好學習一下DateFormat類,可是我查詢了API文檔,感覺還是沒有什么頭緒。只是了解了它是一個抽象類,有諸多方法。

  • 問題2:編譯HowOld2.java時沒有問題,運行時出現如下問題:

  • 解決:是自己輸入不合法,在月份和日期前加0 ,運行成功,截圖如下:

代碼托管

上周考試錯題總結

  • 錯題1:下面哪條命令可以把 f1.txt 復制為 f2.txt ?
    • 原因:少選了選項C .
      cat f1.txt > f2.txt
    • 理解情況:查詢了Cat命令的使用方法

cat主要有三大功能:
1.一次顯示整個文件。
$ cat filename
2.從鍵盤創建一個文件。
$ cat > filename
只能創建新文件,不能編輯已有文件.
3.將幾個文件合並為一個文件。
$cat file1 file2 > file

參數:
-n 或 –number 由 1 開始對所有輸出的行數編號
-b 或 –number-nonblank 和 -n 相似,只不過對於空白行不編號
-s 或 –squeeze-blank 當遇到有連續兩行以上的空白行,就代換為一行的空白行
-v 或 –show-nonprinting

題目涉及到的用法:cat f1.txt > f2.txt把f1.txt文檔內容輸入到f2.txt里

  • 錯題2:下面代碼中共有()個線程?......
  • 原因及理解情況:忘記main函數會自帶一個主線程,所以少差了一個線程,現已理解。
  • 錯題3:"如果有以下代碼段:
    Thread thread = new Thread(new ________________() {
    public void run() {...}
    });

空白部分指定哪些類型可以通過編譯?"

  • 原因:上周學習過程中也出現過這樣的問題(見截圖),但當時解決時理解的並不到位,導致思想被誤導。少選了一個選項:B.Thread

-理解情況:無論是操作Runnable接口,還是繼承Thread類,都可以重新定義run()方法,所以,這里創建線程的兩種方法都可以填在空格里,后面緊跟着{...run()...});是匿名內部類的定義。

  • 錯題4:調用線程的interrupt()方法 ,會拋出()異常對象?
  • 原因:少選了選項:E .
    SecurityException。在上周學習過程中,如何判可能會出現哪些異常也是我提出過的問題(見截圖1),但當時並沒有對該問題深入研究,導致問題還是問題,解決其實還是未解決的現象。

截圖1:

  • 理解情況:查詢API(見截圖2),發現當前線程無法修改這個線程的狀態是會拋出SecurityException。

截圖2:

  • 錯題5:題目截圖如下:

  • 原因:對數組知識掌握不好,對iterator()遍歷方法掌握不熟。

  • 理解情況:

    • 加強式for循環是使用方法:for(Object o : list)外層for循環取得list參考對象的每個索引,將參考到的對象指定給Object類型的o名稱。“:”后要是一個數組的首地址(對一維數組而言及數組名)。
    • iterable()是一個方法,它作為forEach的參數可以實現所有操作過iterable()接口的類都可以調用forEach來實現數組元素的遍歷。
  • 錯題6:題目截圖如下:

  • 原因:

    • 對調用 Integer.parselnt()方法可能會拋出什么錯誤了解不到位
    • 少選了選項A.catch (IllegalArgumentException e) {這個選項開頭少了一個大括號。
  • 理解情況:查詢了API, 其中只提到了“NumbelFormatException”(截圖如下),所以又查詢了IllegalArgumentException的API,了解到它是一種RuntimeException,因為要剖析為整數的字符創“42a”中含有字母a,是一種不合法的參數。

  • 補充:parameter和argument的區別

    • parameter是指函數定義中參數(形參),而argument指的是函數調用時的實際參數(實參)。
  • 錯題7:Given an instance of a Stream, s, and a Collection, c, which are valid ways of creating a parallel stream? (Choose all that apply.)

  • 原因:單詞不理解,對並行流掌握不到位,少選了F .
    s.parallel()。

  • 理解情況:單詞解釋:instance實例,parallel stream並行流。查詢API(截圖如下)parallelStream()是++Collection++方法中定義的方法。而parallel()是++java.util.stream++類下BaseStream,DoubleStream,LongStream,IntStream幾個方法中定義的方法。

  • 錯題8:Which of the following statements about the Callable call() and Runnable run() methods are correct? (Choose all that apply.)

  • 原因:少選了選項C .
    Callable can throw a checked exception.
    D .
    Both can be implemented with lambda expressions.

  • 理解情況:

    • Callable的call()方法當無法計算出結果時拋出Exception異常,Exception中包括受檢異常和非受檢異常。(截圖如下)

    • 一個Lambda Expression (譯為Lambda式) 就是一個包含若干表達式和語句的匿名函數。至於他們是否被lambda繼承,我還是不理解,只是在API中查詢到了如下結果:

  • 錯題9:Which of the following are not java.io classes? (Choose all that apply.)

  • 原因:誤選了F .
    PrintWriter,正確選項:E .
    PrintReader

  • 理解情況:查詢API,發現PrintWriter繼承與java.io.Writer,沒有查詢到PrintReader這個類。(截圖如下)

  • 錯題10:What are some reasons to use a character stream, such as Reader/Writer, over a byte stream, such as InputStream/OutputStream?

  • 原因:英文儲備量不夠

  • 理解情況:錯誤選項Improved performance的意思是改善增進執行。正確選項Automatic character encoding的意思是:自動進行字母編碼。

  • 錯題11:Suppose that the file c:\book\java exists. Which of the following lines of code creates an object that represents the file?

  • 原因少選了new File("c:\\book\\java");

  • 理解情況:查詢資料得知“出現在普通字符串中的路徑,如果代表的是windows文件路徑,則使用 斜桿/ 和 反斜杠\ 是一樣的”

  • 錯題12:Which of the following are built-in streams in Java?

  • 原因:對java內置流的概念不了解。

  • 理解情況:System.err和System.out都是PrintStream的實例,System.in?目前只理解這么多。

  • 錯題13:題目截圖如下:

  • 理解情況,new后面的類要是InputStream的自類,並且可以傳入is,is是被BufferedInputStream打包的new FileInputStream("zoo.txt")實例。而ObjectInputStream可以打包FileInputStream,所以可以選擇D .
    ObjectInputStream。

結對及互評

這周我對搭檔的幫助是分析實驗題目,共同思考解決方案並督促雙方學習。

評分標准

  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

  • 參考示例

點評過的同學博客和代碼

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

自我總結如下:

  1. 做題速度慢,對手機答題的模式還是不太適應,課堂測驗還是大部分做不完。感覺自己學了書上的內容但很多不理解,所以這周把學習重點放在了教材理解上。
  2. 學習java的最終目的是實現自動化,即會編出質量高的程序解決需求。所以夯實基礎的同時提高編程能力才是重中之重。
  3. 第六周老師說可以復制資源中的代碼,所以敲代碼的時間節省了很多,側重點放在了代碼結果預測和分析上。
  4. 經過前幾周的學習,我發現博客知識記錄學習過程的工具,學習知識才是我們真正的目標。而且既然花費時間去學習,就要學透學好,不然時間都是白白浪費了。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一周 4/0 1/3 28/80 下載了JDK和GIT
第二周 61/4 1/4 20/108 在unbuntu中熟練編寫程序,熟練進行文件、目錄等操作
第三周 684/65 1/5 27/108 初步配置vim方便使用,會自己解決一些代碼問題
第四周 1238/749 1/6 23/135 大部分自己補全的代碼片段不會出現問題,漸漸具備脫離書本編代碼的能力
第五周 627/1987 1/7 20/158 能夠幫助其他同學發現代碼出錯的原因
第六周 414/2614 1/8 24/178 能夠整理出教材中各種類、接口、方法之間的相互關系,理清知識脈絡
第七周 564/3028 1/8 17/202 借室友的書進行學習,所以學習時更加注重理解和記憶

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

參考:軟件工程軟件的估計為什么這么難軟件工程 估計方法

參考資料


免責聲明!

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



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