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

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

課堂筆記

  • 十個基本類型
  • 命令:ascii打印ascii值,
  • od -tx1 Test.java用十六進制查看代碼,od -tx1 -tc Test.java顯示出對應的原代碼
  • 信息 = 位 + 上下文
  • 亂碼緣由:編碼方式不一樣。
    • 每一個漢字有個「國標碼」。設定編碼爲utf-8
  • 自定義類型
    • java中: ;c語言中:結構體。
      • 用父類聲明變量名的引用,子類生成新的對象。
      • is - a規則
      • 強制類型轉換。(類型)父類->子類。
    • 具有抽象能力
      • 根據業務邏輯抓事物本質特徵。
      • 不一樣業務系統中抽象的內容不一樣。
  • Don't Repeat Yourself: DRY
    • 使用變量:final int nstu = 84;
    • 使用函數:f( ... )——方法
    • 使用繼承:抽象出父類。
    • bin 中的.class文件與src中的.java文件重複,無需託管。
    • .git 版本信息,.gitignore:其中註釋的文件無需託管。eg:*.class
  • 面向對象的三要素:封裝、繼承和多態。封裝是繼承的基礎,繼承是多態的基礎。
  • lamda表達式:實現匿名內部類的新方法。

教材學習內容總結

知識

  • API文檔中帶throws的必須使用try...catch,例如System.in.read()
  • 堆棧追蹤信息中,最頂層是異常的根源,如下是調用方法的順序。printStackTrace還接受PrintStream、PrintWriter的版本,能夠將堆棧信息以指定方式至輸出目的地。
  • try的括號中越後面撰寫的對象資源會越早被關閉。

動手

  • 根據老師的課程指導,對P227Average文件進行了三組測試,用例爲(1)8 9 10 0 ->平均9.00;(2)5 6 4 2 0->平均4.25;(3)5 4 8 0->平均5.67。指望結果與輸出結果相同。
  • 輸入u以後,顯示出錯截圖以下:(產生異常的報錯信息出如今第一行Exception in thread "main" java.util.InputMismatchException:非預期輸入不匹配)(引發異常的程序代碼信息在最後一行:at Average.main(Average.java:10)
  • 與 Average.java比較,Average2.java程序的優勢是:利用try catch非法輸入後能夠顯示友好的提示信息。
  • 與 Average2.java比較,Average3.java程序優勢是:將try catch放在控制輸入的while循環中,用戶非法輸入後能夠回覆正常流程。
  • 正則表達式概要:
    • 正則表達式能夠看做是文本處理中「查找/替換"的領域專用語言。
    • 在信息安全專業課中有不少應用,好比數據安全驗證、Web安全中的SQL注入防範、XSS攻擊防範等。

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

  • 『問題1』:爲何8.1.2異常繼承架構中第一個使用try catch打包System.in.read()的代碼片斷在補全後,結果與預測值不同?(輸入89,預測89,實際輸出56)。截圖以下:
    html

  • 『解決方案』查詢了API中關於System.in.read()的說明, 瞭解到System.in.read()返回的是輸入數值的 ASKII 碼。
  • 『問題2』:還是問題1的代碼段,其中ex.printStackTrace是進行了怎樣的錯誤處理?
  • 『解決方案』:ex:表示異常對象,這個對象中包含了當前異常的全部信息;printStackTrace();則表示打印異常堆棧信息,通常是打印到控制檯,方便問題的定位和分析(日記記錄)。
  • 『問題3』:用ascii打印出來的表怎麼看?截圖以下:
    java

  • 『解決方案』:查了一下,第一列Dec表示十進制,第二列Hex表示十進制對應的十六進制,第三列沒有名字,是十進制對應的計算機中的字符。(97 61 a:表示a的ascii值爲97,用十六進制表示爲61)
  • 『問題4』:異常對象的名稱能夠隨便定義嗎?仍是隻能用書中出現的eex
  • 『解決方案』:進行了嘗試,將其改爲自定義名稱hh,仍然能夠編譯運行。
  • 『問題5』:try {...}catch(IOException e){...}中++IOException++爲何前面不加java.io?
  • 『解決方案』:在個人虛擬機中第一種寫法編譯沒法經過,應該把java.io補上。
  • 『問題6』:異常對象是並列關係時,try catch前後順序有差異嗎?
  • 『解決方案』:只要父類不出如今子類以前就能夠了。
  • 『問題7』:InterruptedException是什麼異常?
  • 『解決方案』:當線程在活動以前或活動期間處於正在等待、休眠或佔用狀態且該線程被中斷時,拋出該異常。拋InterruptedException的表明方法有:
  1. Java.lang.Object 類的 wait 方法
  2. java.lang.Thread 類的 sleep 方法
  3. java.lang.Thread 類的 join 方法
  • 『問題8』:scanner.hasNext()是在判斷什麼?
  • 『解決方案』:查詢了API,"Returns true if this scanner has another token in its input."這句話的意思應該是輸入仍在進行就返回true吧。截圖以下:
    git

  • 『問題9』:builder.append(scanner.nextLine());builder.append('\n');這兩句中的.append()是在作什麼?
  • 『解決方案』:append函數的功能:以可寫方式打開文件。若是文件不存在,將會自動建立。使用該函數,將會覆蓋文件中的全部內容。因此這兩句是將輸入的一句寫入文件,再換行。查詢API截圖以下:
    正則表達式

  • 『問題10』:StringBuilder類的具體定義語法是什麼?
  • 『解決方案』:查詢了API,StringBuilder()是構造一個沒有元素的字符串,最初的容量是16個字符。截圖以下:
    編程

  • 『問題11』:老師給的代碼,運行完m3()爲何會「Caught IOException in m1()...rethrowing」?返回主函數後爲何會「Caught IOException in main()」?
  • 『解決方案』:API中關於IOException的解釋爲「Signals that an I/O exception of some sort has occurred. This class is the general class of exceptions produced by failed or interrupted I/O operations.」意思是「當發生某種 I/O 異常時,拋出此異常。此類是失敗或中斷的 I/O 操做生成的異常的通用類。」因爲在m1中調用m3(true)時參數genExc爲true,在m3中執行 if (genExc)中的語句,新建異常對象,返回m1後接受到這個異常因此執行catch中的語句。
  • 『問題12』:9.1.1中Guest.java代碼中guest.toUpperCase()是什麼意思?
  • 『解決方案』:查詢了API,其中toUpperCase()解釋爲:返回一個字符串,該字符串中的全部字母都被轉化爲大寫字母。
    vim

  • 『問題13』:爲何用Set自動去掉重複字符串打印時,會有兩個"[]"括號把字符串括起來呢?
  • 『問題14』:爲何打印9.1.3Words.java中的tokens時,只打印出第一個字符串呢?
  • 『解決方案』:String [] tokens表示tokens是字符串數組,System.out.printf("%s",tokens);只是打印tokens所指向的第一個成員的字符創,若是想所有打印,須要用循環。設計模式

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

  • 『問題1』:在補全8.3.1中第一個代碼後,編譯提示找不到符號FileInputStream。
  • 『解決方案』:查詢了API,FileInputStream是java.io.InputStream的子類,因此使用前前須要import java.io.*;截圖以下:
    api

  • 『問題2』:寫了TestFileUtil類測試p236 FileUtil.java編譯時提示「必須對FileNotFoundException進行捕獲或聲明以便拋出」。截圖以下:
    數組

  • 『解決方案』:在main(String[] args)後加throws FileNotFoundException結果編譯經過,運行時,將readFile()中的參數設爲"FileUtil"結果顯示沒法找到文件FileUtil。截圖以下:
    安全

  • 「嘗試」將參數中添加文件所在路徑~/zjy20155312/src/Unit08/FileUtil但仍是拋出FileNotFoundException異常,沒法找到指定文件。
  • 『問題3』:補全doSome的代碼片斷後出現這樣的編譯問題:

  • 『解決方案』:添加一個class。總結:一個程序中若是沒有定義class,interface,enum,只是定義了一個方法,是沒法經過編譯的。

代碼託管

  • 代碼提交過程截圖:

  • 代碼量截圖:

上週考試錯題總結

  • 『錯題1』:填空:」Hello」.charAt(1) 的值是(‘e’)
    • 「緣由」:理解題意有誤,覺得是求字符‘e’對應的整數值。
    • 「理解狀況」:已理解,charAt(1)的意思是取字符串下標爲1的字符(下標從0開始)。
  • 『錯題2』:填空:寫出編譯P165 RPG.java的命令(javac –d . *.java)
    • 「緣由」:覺得只是編譯RPG.java這個文件便可,因此個人答案是(javac -d xxx RPG.java)。
    • 「理解狀況」:1.不理解爲何把生成的.class文件放到.當前文件夾下,這樣指定路徑還有什麼意義呢?2.用*代替RPG的是由於要連帶把文件中涉及到的SwordsMan.java和Magician.java兩個文件一塊兒編譯了嗎?解決:RPG是測試類代碼,老師答案中*.java是把它和工做類代碼一同翻譯了。
  • 『錯題3』:判斷:父類中有個public void fight(),子類中有個public void fight( Weapon w),這兩個方法的關係是Override.(X)
    • 「緣由」:對方法的重載(Overload)和覆蓋(Override)概念混淆。
    • 「理解狀況」:方法重載是在一個類中使用多個同名構造函數,其間只是參數類型和個數不一樣;覆蓋是子類對父類中定義的方法的從新描述,其方法名,參數表都須要一致。參考方法重寫(OverRide)具體對好比下:
      • 相同點 : 都要求方法名稱相同均可以應用於抽象方法和非抽象方法之間。
      • 不一樣點:
      1. 方法重載發生在同一個類的內部的方法內,而方法重寫發生在繼承關係中,子類重寫了父類的方法;
      2. 方法重載不要求方法的返回類型一致與否 而方法重寫要求返回類型必須一致,要求方法的參數簽名必須不一致,而方法重寫要求方法的參數簽名必須一致
      3. 方法重載對方法的訪問權限和拋出異常沒有限制,而方法重寫對方法的訪問權限和拋出異常有限制
  • 『錯題4』:填空:實現接口表示(擁有行爲),但不是ISA關係。
    • 「緣由」:對題目理解不到位,時間不夠用。
    • 「理解狀況」:已經理解,「擁有行爲」與「是一種」關係相似,都是等號右側「...」等號左側。
  • 『錯題5』:填空:實現一個類中的equals()方法時,必定要同時實現(hashCode())方法。
    • 「緣由」:時間不夠。
    • 「理解狀況」:書有這樣一句話「操做equals()同時也會操做hashCode()」。
  • 『錯題6』:判斷:Java中全部的對象都有equals()方法。(OK)
    • 「緣由」:不記得本身有沒有作這道題。
    • 「理解狀況」:equals是Object類有定義的方法,它的源程序是return this == obj,對於Java中的全部對象,不管是基本類型仍是類類型,均可以進行==比較。
  • 『錯題7』:判斷:XX是一個引用型變量,System.out.println(XX)等價於System.out.println(XX.toString()). (OK)
    • 「緣由」:時間不夠。
    • 「理解狀況」:已理解。
  • 『錯題8』:面向對象中,設計經驗能夠用(設計模式)表達。
    • 「緣由」:看書不仔細,自學過程當中雖然結合了教學指導,但仍不知道一部分知識是重點。
    • 「理解狀況」:設計模式是可複用面向對象軟件的基礎。參考Java開發中的23種設計模式詳解
  • 『錯題9』:判斷:Math中的abs()方法能夠Override.(X)。

    • 「理解狀況」:override 具體知識點:
      • 子類的方法名稱,參數簽名和返回類型必須與父類的方法名稱,參數簽名和返回類型一致。
      • 子類的方法不能縮小父類方法的訪問權限,只能擴大不能縮小。
      • 子類方法不能拋出比父類方法更多的異常,子類方法拋出的異常必須與父類相同或拋出的異常類爲父類拋出異常類的子類。
      • 父類的靜態方法不能被子類覆蓋爲非靜態方法。
      • 父類的非靜態方法不能被子類覆蓋爲靜態方法。
      • 父類的非抽象方法能夠被子類覆蓋爲抽象方法。

        結對及互評

        這周我對搭檔的幫助主要是幫她在週三的練習題中分析代碼,一塊兒修正代碼。在計算機二級的考試複習階段相互鼓勵,與她共享個人複習文檔和考試經驗,同時督促對方學習java。

        評分標準(滿分10分)

  1. 從0分加到10分爲止
  2. 正確使用Markdown語法(加1分):
    • 不使用Markdown不加分
    • 有語法錯誤的不加分(連接打不開,表格不對,列表不正確...)
    • 排版混亂的不加分
  3. 模板中的要素齊全(加1分)
    • 缺乏「教材學習中的問題和解決過程」的不加分
    • 缺乏「代碼調試中的問題和解決過程」的不加分
    • 代碼託管不能打開的不加分
    • 缺乏「結對及互評」的不能打開的不加分
    • 缺乏「上週考試錯題總結」的不能加分
    • 缺乏「進度條」的不能加分
    • 缺乏「參考資料」的不能加分
  4. 教材學習中的問題和解決過程, 一個問題加1分

  5. 代碼調試中的問題和解決過程, 一個問題加1分

  6. 本週有效代碼超過300分行的(加2分)
    • 一週提交次數少於20次的不加分

6 其餘加分:
- 週五前發博客的加1分
- 感想,體會不假大空的加1分
- 排版精美的加一分
- 進度條中記錄學習時間與改進狀況的加1分
- 有動手寫新代碼的加1分
- 課後選擇題有驗證的加1分
- 代碼Commit Message規範的加1分
- 錯題學習深刻的加1分
7 扣分:
- 有抄襲的扣至0分
- 代碼做弊的扣至0分

點評模板:

  • 基於評分標準,我給本博客打分:(0-10)。得分狀況以下:xxx

  • 參考示例

點評過的同窗博客和代碼

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

自我總結以下:

  1. 作題速度慢,課堂測驗出現作不完題的狀況。
  2. 對書本知識掌握存在片面性,對延展性知識瞭解不夠。
  3. 學習java的最終目的是實現自動化,即會編出質量高的程序解決需求。因此夯實基礎的同時提升編程能力纔是重中之重。
  4. 第五週因爲花費了大部分時間準備計算機二級考試,週一到週五沒能作到天天學習java,在之後的學習中不會再出現這樣的狀況。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 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 大部分本身補全的代碼片斷不會出現問題,漸漸具有脫離書本編代碼的能力
第五週 696/1987 1/7 20/158 可以幫助其餘同窗發現代碼出錯的緣由

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

參考:軟件工程軟件的估計爲何這麼難軟件工程 估計方法

參考資料

相關文章
相關標籤/搜索