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

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

教材學習內容總結

繼承、多態與is-a

  • 繼承就是避免多個類間重複定義共同行爲。
  • 能夠把相同的成粗代碼提高爲父類。
  • java中子類只能繼承一個父類,這種子類父類之間的關係就是is-a關係。
  • 檢查語法是否正確就可使用is-a即「是一種」來判斷,方式是從=右邊往左讀:判斷右邊是否是一種左邊。例:Role role1=new SwordsMan();就是判斷SwordsMan是否是一種Role?如果則語法正確,反之則編譯失敗。相關練習:連接1,連接2,連接3 ,運行結果以下

從新定義行爲以及抽象方法、抽象類

  • 在繼承父類以後,定義與父類中相同的方法部署,但執行內容不一樣,這稱爲從新定義。
    此處應該注意在從新定義父類中某個方法的時候,必定要注意子類與父類的簽署必須相同。這個問題看似不起眼,可是在本身學習過程當中就有發生,在下面的代碼調試部分由做出詳細的說明,所以爲了防止打錯字,能夠在子類中某個方法前標註@Override,要求編譯程序檢查,是否真的從新定義了父類中的某個方法。這部分的練習與結果以下:連接1,連接2,連接3
    html

  • 1.在上面的學習中,Role2中的fight中沒有任何程序操做,這時候可使用adstract表示該方法爲抽象方法,不用撰寫{}區塊,直接「;」結束便可。例如
    public abstract class Role{ ..... public abstract void fight(); }
    2.注意內含抽象方法的類,必定要在class前表示abstract。
    3.抽象類不能使用new生成對象。
    4.子類繼承抽象類方法:1.繼續標示該方法爲abstract;2.操做抽象方法。
    相關練習:連接1,連接2,連接3,運行結果以下圖
    java

繼承語法細節

protected成員以及從新定義的細節

  • 被聲明爲protected的成員,相同包中的類能夠直接存取,不一樣包中的類能夠在繼承後的子類直接存取。進行練習,連接1,連接2,連接3,運行結果以下圖
    git

  • JAVA中private、無關鍵字、protected、public權限依次遞增。
  • 在JAVA中若是想取得父類的方法定義,能夠在調用方法前,加上super關鍵字。相關練習連接1連接2連接3
    程序結果以下圖
    編程

構造函數

  • 父類中能夠重載多個構造函數,若是子類構造函數中沒有指定執行父類中哪一個構造函數,默認會調用父類中無參數構造函數。
  • 若是想執行父類中的某個構造函數,能夠用super()來指定。
  • this()super()只能選擇一個調用,並且必定要在構造函數第一行執行。
  • Object上定義的方法,只要不被定義爲final方法,均可以從新定義。
  • 相關練習及截圖:連接1,連接2,結果以下

垃圾收集

對於再也不有用的對象,JVM有垃圾收集機制,收集到的垃圾對象所佔據的內存空間,會被垃圾收集器釋放。網絡

第七章 接口與多態

接口定義行爲以及行爲的多態

  • 對於「定義行爲」,在java中可使用interface關鍵字定義。
  • 類要操做接口,必須使用implements關鍵字。操做某接口時,對接口中定義的方法有兩種處理方式,一種是操做接口中定義的方式,另外這一種是再度將方法標示爲abstract。
  • 爲避免在多個種類的時候設計多個重載方法,能夠經過統一的接口來設計一個方法。
    對於這部分的練習:連接1連接2,連接3,連接4連接5連接6,程序結果以下圖

解決需求變化

  • 增長新的需求,原有的程序無需修改,只需針對新需求撰寫程序,就是有彈性、具可維護性的程序。
  • 在java中,類能夠操做兩個以上的類,也能夠同時繼承某個類,並操做某些接口。
  • 在java中接口能夠繼承自另外一個接口,也就是繼承父接口的行爲,再在子接口中額外定義行爲。進行了書上的練習,連接1連接2連接3結果以下圖

接口語法細節

接口的默認

  • 在Java中可使用interface來定義抽象的行爲和外觀,如接口中的方法可聲明爲public abstract
  • 接口中的方法沒有操做時必定得是公開且抽象的。也能夠省略public abstract
  • 在接口中能夠定義常數,但只能定義public static final的常數,在程序中能夠省略。例如:連接1,連接2,結果以下圖
    dom

  • 接口能夠繼承別的接口,也能夠同時繼承兩個以上的接口,一樣也是用extends關鍵字,這表明了繼承父接口的行爲。ide

    匿名內部類與使用enum枚舉

  • 臨時繼承某個類或操做某個接口並創建實例,因爲這類子類或接口操做類只使用一次,不須要爲這些類定義名稱,可使用匿名內部類。
  • enum能夠同於定義枚舉常量。函數

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

  • 1.教材中在介紹protected成員時,定義的toString()方法中,書上既編寫了使用getName()來取得姓名,也編寫了直接用this,name來取值,那對於protected成員,是兩種均可以嗎?
  • 解決:上機編寫兩種了程序,發現即便把getName()刪了,用this.name也能夠取得姓名,相反用getName()方法也是能夠取到值的,比較出了protectedprivate的區別。同時對於getName()方法,既然是已經聲明瞭的方法那麼就對於全部狀況均可以使用。
  • 2.爲何接口中的常量只能用public static final來修飾。
  • 解決:經過上網查詢,綜合本身的理解,獲得了以下的答案。首先對於使用public比較好理解,由於定義的接口是爲了後來的程序來使用,因此確定須要將接口裏的類和方法用public來修飾;對於static,static修飾就表示它屬於類的,隨着類的加載而存在的,若是是非static的話,就表示屬於對象的,只有創建對象時纔有它,而接口是不能創建對象的,因此接口的常量必須定義爲static;對於final則是爲了保障常量不能被改變,雖然static是靜態變量,但仍是能夠隨時改變其值,因此必需要有final來保障常量的值不會被改變。
  • 3.在學習使用enum枚舉常量時 教材中說到不須要使用default在執行的時候才能檢查,那麼他是怎麼檢查的呢?
  • 解決:經過編譯代碼,知道了當定義了美劇常量的時候,若是輸入了不合法的常量,那麼就會提示出錯,沒法越界,以下圖

  • 4.對於教材中關於扮演的內容,書上的例題能夠經過現實生活中的常識來判斷可不能夠經過編譯,好比讓人阿里扮演鯊魚之類,可是編程時若是遇到一些抽象的內容,怎麼判斷能不能編譯經過呢?
  • 解決:還沒有解決。
  • 5.在作課後的練習題時,接口前並無加上public或者public abstract,但能夠經過編譯,是爲何?
  • 解決:經過查詢,接口默認爲public abstract,因此即便不加亦不會出錯。學習

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

  • 1.在從新定義行爲的時候,不知道爲何,我在子類中從新定義的fight老是出錯,以下圖
    this

  • 解決:檢查代碼,翻閱書籍,發現是父類在寫fight方法時簽署打錯了,在此必定要注意從新定義父類中某個方法的時候,必定要注意子類與父類的簽署必須相同,不然就會出錯。
  • 2.在再看抽象類部分,書上的代碼,對於輸入的文本即便我把「\n"去掉,文本以後仍是會換行,對於println的從新定義也沒用換行,這是爲何呢?代碼以下
public  abstract class GuessGame {
    public void go(){
        int number=(int) (Math.random()*10);
        int guess;
        do{
            print("輸入數字:");
            guess=nextInt();
        }while(guess!=number);
        print("猜中了");
    }
    //public void println(String text){
       //print(text);
    //}
    public abstract void print(String text);
    public abstract int nextInt();
}
import java.util.Scanner;
public class ConsoleGame extends GuessGame {
    private Scanner a=new Scanner(System.in);

    @Override
    public void print(String text){
        System.out.println(text);
    }

    //@Override
   // public void println(String text){
        //System.out.println(text);
    //}

    @Override
    public int nextInt(){
        return a.nextInt();
    }
}
  • 解決:還沒有解決。
  • 2.在學習繼承父類接口的時候,當我定義了doswim方法時,編譯老是不經過,而且還會出現如下提示:

  • 解決:在上網搜索後發現,static修飾的方法稱爲靜態方法,那麼根據提示應該就是static修飾的方法出現了問題,檢查代碼,發現是將定義的內部類寫成了public類,致使編譯不經過。修改代碼,並再次運行,最終獲得正確結果。

代碼託管

  • 代碼提交過程截圖:

  • 代碼量截圖:

上週考試錯題總結

  • 1.Linux Bash中,(grep )命令能夠進行全文搜索。
  • 對Linux命令不夠熟悉。
  • 2.兩個Integer對象比較大小,可使用(comareTo())方法 。
  • Integer提供comareTo()方法與另外一個Integer比較大小,Integer類中須要重寫equals方法,否則仍舊比較的是地址,而不是內容。
  • 3.「30」轉化爲byte類型的30的語句是(Byte.parseByte(「30」);)
  • 題目給出的是「30」,而不是30。

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

首先對於以前的內容,可能仍是不夠清楚自學的方法,即便以爲看的能夠了,考試時候就會驚覺學到的東西好像仍是欠缺不少,所以對於重點的掌握仍是須要改進。對於第6、第七章的學習,總的來講,任務仍是比較繁重的,但一每天的積累,一點點的累積,收穫仍是頗豐,慢慢的找到了一些本身學習的門路,好比能夠藉助網絡等。但願在往後的學習中能夠更透徹的掌握學習java的方法,能夠事倍功半,是最好不過的。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 20/20 1/4 20/20
第二週 145/165 1/5 12/32
第三週 411/576 1/6 16/48
第四周 1021/1597 1/7 25/73

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

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

  • 計劃學習時間:25小時

  • 實際學習時間:25小時

  • 改進狀況:這周天天都或多或少的敲了些代碼,天天分批次學習,同時對上週的內容溫習了一下,同時本身也有去設計一些簡單的程序,來結合對書本上的內容的學習。

  • 有空多看看現代軟件工程 課件 軟件工程師能力自我評價表

參考資料

相關文章
相關標籤/搜索