20165214 第五週學習任務

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

教材學習內容總結

  • 第七章:內部類與異常類
    • 7.1內部類:內部類就是在一個類中再定義一個類,這個在類中定義的類就叫作內部類,而包含內部類的類叫作外嵌類。
      • 外嵌類的成員變量、方法能夠在內部類中調用;內部類不能聲明類變量和類方法(static);外嵌類的類體能夠用內部類聲明類對象;內部類僅供外嵌類使用,其餘類不能夠用某個類的內部類聲明對象。
      • 由下圖,內部類編譯獲得的字節碼名字格式爲[外嵌類名]$[內嵌類名].class
      • 內部類也能夠用static來修飾。這樣的內部類能夠用來在其餘類中建立對象,可是這樣的內部類不可以操做外嵌類的實例變量。
    • 7.2匿名類:匿名類是子類的一種,它沒有名字,因此不能聲明對象,可是能夠直接建立對象:new [父類名]() {匿名類類體};
      • 匿名類的幾個特色:①匿名類能夠繼承、重寫父類的方法;②匿名類是內部類,因此匿名類的使用要遵照內部類的規則;③匿名類沒有類名,因此在建立時直接使用父類的構造方法。
      • 能夠用接口名和類體來建立一個匿名的對象:new [接口名]() {匿名類類體};這個類體也叫作匿名類。此時,類體必須重寫接口中的全部方法。
    • 7.3異常類:在這裏先介紹一個在java.lang包中的類Integer中的一個方法public static int parseInt(String s)能夠把數字格式的字符串轉化爲int類型。
      • try-catch語句:用來處理出現的異常操做。語句格式爲try {可能發生異常的語句} catch(ExceptionSubclass1 e) {...} catch(ExceptionSubclass2 e) {...}實現的功能是一旦在try部分出現異常,立刻結束try的執行,而後在下面的語句中尋找相應的catch部分執行(catch關鍵字就是用來捕獲被拋出的異常對象)。
      • throw關鍵字:當運行出現異常時,可以使用throw關鍵字來拋出異常的對象;而throws關鍵字用來聲明要產生的若干個異常。要注意區分二者的區別
      • 咱們可以經過擴展Exception類定義本身的異常類。
    • 7.4斷言
      • 斷言語句經過關鍵字assert來聲明。有兩種形式:①assert booleanExpression,當程序運行到這一句時,若是被修飾的表達式爲true,程序接着運行,不然程序中止運行。②assert booleanExpression:messageException,當程序運行到這一句時,若是被修飾的表達式爲true,程序接着運行,不然程序中止運行並輸出「:」後的值。
      • 使用java解釋器直接運行程序,默認關閉斷言語句;但在程序調試中可使用-ea啓用斷言語句:java -ea [主類名]
    • 7.5小節中出現了一個新的關鍵字finally,它的執行機制是,不管在運行程序的時候出現什麼狀況,finally子語句必定會被執行,除了若是在finally子語句前出現了程序對出代碼System.exit(0);
  • 第十章:輸入、輸出流
    • 輸入、輸出流的做用是讀入外部數據、向外部輸出數據。全部輸入流都是InputStreamReader的子類,全部的輸出流都是OutputStreamWriter的子類。
    • 10.1 File類
      • File類的對象主要用來獲取文件自己的一些信息,不涉及對文件的讀寫操做。建立一個File對象的構造方法:①File(String filename);File(String directoryPath,String filename);File(File dir,String filename); 。文件的屬性:
      • 使用File對象調用方法public boolean mkdir()來建立一個目錄,建立成功返回true,失敗或者目錄已經存在則返回false;
      • 當File對象是目錄時,能夠利用public String [] list(FilenameFilter obj)來返回目錄下指定類型的全部文件,public File [] listFiles()來用File對象形式返回目錄下的指定類型的文件。
      • 當使用File類建立一個文件對象後,若在指定的目錄下沒有指定名字的文件,則可使用public boolean createNewFile()來在這個目錄中建立一個該名的文件。對象調用方法public boolean delete()能夠用來刪除當前文件。
      • 要執行一個本地機器上的可執行文件時,可使用Runtime類:Runtime [對象名]=Runtime.getRuntime();,而後藉助這個對象調用exec([命令字符串]來進行打開可執行文件或者執行操做。
    • 10.2文件字節輸入流:使用輸入流的4個步驟:①設定輸入流的源;②建立指向源的輸入流;③讓輸入流讀取源中的數據;④關閉輸入流。
      • 可使用**InputStream*的子類FileInputStream來讀取對需求比較簡單的文件。可使用FileInputStream(String name);來設定名字爲name的文件爲輸入流的源,用 FileInputStream(File file);```來設定file指定的文件爲輸入流的源。
      • 建立輸入流時可能會出現錯誤,好比指向的文件不存在。這時候會出現IO異常(IOException),所以可使用try-catch語句來處理這個異常。
      • 輸入流是讀取源中數據的「通道」。文件字節流(FileInputStream)能夠調用繼承的read方法來順序地讀取文件(以字節爲單位),並且只要不關閉流,每次調用read方法就能讀取其他的內容,直至源的末尾或流被關閉。①int read()能夠從源中讀取單個字節的數據,返回0~255的一個整數,未讀出字節返回-1。②int read(byte b[])能夠從源中讀取b.length個字節到字節數組b中,返回讀取的字節數目。到達文件末尾返回-1。③int read(byte b[],int off,int len)能夠用來讀取源文件中從off開始共len個字節到數組b中,返回讀取的字節數目。到達文件末尾返回-1。
      • 能夠調用輸入流的方法close();來關閉流。程序結束時會自動關閉全部打開的流,可是要學會顯式地關閉打開的流。
    • 10.3文件字節輸出流(經過學習能夠知道,輸出流與輸入流的一些方面是相似的):使用輸出流的4個步驟:①設定輸出流的目的地;②建立指向目的地的輸出流;③讓輸出流把數據寫入到目的地;④關閉流;
      • 可使用**OutputStream*的子類FileOutputStream來讀取對需求比較簡單的文件。可使用FileOutputStream(String name);來設定名字爲name的文件爲輸入流的源,用 FileOutputStream(File file);```來設定file指定的文件爲輸入流的源。
      • 若是輸出流指向的文件不存在,Java就會建立該文件,若是指向已存在的文件,會刷新這個文件(長度變爲0)。建立輸出流時可能會出現錯誤,好比指向的文件權限不夠。這時候會出現IO異常(IOException),所以可使用try-catch語句來處理這個異常。
      • FileOutputStream(String name,boolean append);和FileOutputStream(File file,boolean append)來判斷是否對文件進行刷新:append取true不刷新,取false刷新。0
      • 輸出流是通往目的地的「通道」。文件字節流能夠調用write方法順序地寫入文件,只要不關閉流,每次調用就順序寫入,直到流被關閉。①void write(int n)能夠用來向目的地寫入單個字節。②void write(byte b[])能夠用來向目的地寫入一個字節數組。③void write(byte b[],int off , int len);能夠用來向目的地寫入數組b從off開始共len長度的字節。
      • void close()關閉輸入流,同時能夠保證沖洗掉緩衝區的內容。
    • 10.4 文件字符輸入、輸出流。
      • 一個漢字在文件中佔兩個字節。與字節流對應的是FileReaderFileWriter字符流。其構造方法也與10.3的內容類似。
    • 10.5 緩衝流:BufferedReader類和BufferedWriter類建立的對象叫作緩衝輸入、輸出流。構造方法分別爲BufferedReader(Reader in);BufferedWriter(Writer out)緩衝流加強了讀寫文件的能力。
      • BufferedWriter可以讀取文本行,方法是readLine();也能夠向文件寫入一個回行符,方法是newLine()
      • 關閉輸出流首先要關閉上層流。
    • 10.6 隨機流:隨機流能夠讀、寫文件。構造方法RandomAccessFile([文件名],[文件權限])RandomAccessFile([File對象名],[文件權限]),其中權限爲r(只讀)或rw(可讀寫)。當指向文件時不會刷新文件。
      • 可使用seek(long a)和getFilePointer()```來獲取流的讀寫位置。
    • 10.7 數組流:字節數組輸入、輸出流:ByteArrayInputStream();ByteArrayOutputStream(),相關用法與以前的流類似。
    • 10.8 數據流:數據輸入、輸出流:DateInputStreamDateOutputStream,它們容許程序按着與機器無關的風格讀取Java原始數據。
    • 10.9 對象流:對象輸入、輸出流:ObjectInputStreamObjectOutputStream,使用對象流時要保證對象時序列化的。
    • 10.10 序列化與對象克隆:使用對象流較容易獲得一個序列化對象的克隆:把一個對象寫入輸出流目的地,再把這個目的地做爲輸入流的源。
    • 10.11 使用Scanner解析文件。與8.3相似,只不過這裏是解析文件中的數據。
    • 10.12 文件對話框:建立文件對話框有兩步:①使用JFileChooser()建立初始不可見的有模式對話框;②使用showSaveDialog(Component a);或者showOpenDialog(Component a);使對話框可見。
    • 10.13 帶進度條的輸入流。可使用ProgressMonitorInputStream(Component c,String s,InputStream);來在讀取文件時彈出進度條。
    • 10.14 文件鎖的使用步驟:①使用RandomAccessFile流建立流對象(讀寫屬性爲rw)②input流調用方法getChannel()獲取一個鏈接到底層文件的FileChannel對象;③信道借用tryLock或lock方法得到一個FileLock(文件鎖)對象。

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

  • 問題1:一個內部類A的內部是否還能再定義一個以A爲外嵌類的內部類B?(即大農場——養殖場——養牛場的關係)
  • 問題1解決方案:本身嘗試了一下,還真的能夠。我只在一個內部類中再建了一個內部類,至關於總共有三層。由此我猜想,能夠不斷在新的內部類中建立內部類。不過過多層內部類也有一個很明顯的缺點就是,很容易把人弄暈。。在寫第三層的時候我就已經出現了不少次的錯誤。由此我判定,內部類的這種使用方式在現實中確定用得不多。
  • 問題2:在書本P286的代碼中出現了這樣一句String s = new String (a,0,n);不知道這是什麼用法。
  • 問題2解決方案:經過代碼上下段還有輸出結果來看,這是將數組a從開頭開始算共n個複製到字符串s中。

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

  • 問題1:在調試課本Example7_2的時候,編譯能夠經過,可是運行卻出現了這樣的狀況:
    html

  • 問題1解決方案:把錯誤的緣由翻譯了一下,發現是輸出的類型有所不對。接着看了一下主函數,發現原始是我把輸出的格式c寫成了d。改過來後問題解決了。
    其餘問題都是本身輸入的錯誤,就不列舉了。java

    代碼託管

上週考試錯題總結

  • 錯題1:「面嚮對象語言中的「類」至關於C語言中的函數」這是錯的。應該是「面嚮對象語言中的「方法」至關於C語言中的函數」。
    git

  • 錯題2:UML類圖中一個類的屬性能顯示它的名字、類型、初始化值。方法的屬性用+表示public,用-表示private,作題的時候不當心記反了。
    數組

  • 錯題3:String="ab"+"cd",只建立了一個對象。
    app

結對及互評

點評過的同窗博客和代碼

  • 本週結對學習狀況
    • 20165210dom

    • 結對學習內容
      共同安裝IDEA,學習IDEA的調試函數

其餘

這周的學習感受比較艱難,由於涉及到了文件的內容,並且內容還不少,須要記下來的一些流的用法也很多。可是在學習的時候,仍是蠻有興趣的,由於能夠學到如何編寫一個文件對話框。之前咱們學語言的時候,都只是在一個編譯器上面運行,並無出現圖形界面。如今開始接觸到了這一塊,使人感受仍是蠻酷的,想把這塊學好而後編寫出本身的軟件出來。相信本身必定能作到!性能

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積)
目標 5000行 30篇 400小時
第一週 36/36 1/1 8/8
第二週 432/468 2/3 15/23
第三週 964/1432 1/4 16/39
第四周 725/2157 1/5 14/53
第五週 1428/3585 3/8 18/71
  • 計劃學習時間:15小時學習

  • 實際學習時間:18小時翻譯

相關文章
相關標籤/搜索