20145212 《Java程序設計》第4周學習總結

20145212 《Java程序設計》第4周學習總結

教材學習內容總結

  • 第六章知識點:
    1.繼承基本上就是避免多個類間重複定義的行爲。
    2.子類繼承父類,經過繼承,咱們能夠避免類間的重複定義,子類與父類之間也會有「is-a」的關係,即子類是一種父類。
    3.繼承中的is-a原則牽涉所寫的代碼彈性以及是否便於維護。
    4.繼承中的構造函數:若是類有繼承關係,在建立子類實例後,會先進行父類定義的初始流程,再進行子類中定義的初始流程。
    5.構造函數能夠重載。
    6.在Java中,子類只能繼承一個父類。
    7.final關鍵字:final變量的值不能被修改,即final定義能夠理解爲「最後一次定義」。
    8.定義類時,若是沒有使用extends關鍵字指定繼承任何類,則必定是繼承java.lang.Object。
    9.垃圾收集:沒法經過變量參考的對象被視爲垃圾對象被JVM的垃圾收集機制處理。
  • 第七章知識點:
    1.操做接口:類經過使用implements關鍵字操做接口。
    2.使用interface關鍵字定義行爲。
    3.類能夠擁有兩種以上的行爲,能夠在繼承某個類的同時操做某些接口。
    4.接口能夠繼承別的藉口,經過extends關鍵字表明繼承父接口的行爲。
    5.使用接口枚舉常數只能定義爲public static final。
    6.enum語法能夠用於定義枚舉常數。

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

在學習到書上的抽象類實例時,書中舉得例子是經過先操做需求部分的內容來設計程序,使得自己看似不合理的需求獲得知足。這一點放在Java中,就表現成對一個類的定義不完整的時候抽象的方法仍是能夠調用運行。這讓我對Java的認知有了新的提高:有了這種抽象類咱們能夠實現一些「感受上」不能被實現的問題。
我感受書上對抽象類的概念和用法並無很清晰,經過查閱資料我還獲得了一下關於抽象類的規定:
  • 在實現抽象類時,必須實現該類中的每個抽象方法,而每一個已實現的方法必須和抽象類中指定的方法同樣,接收相同數目和類型的參數,具備一樣的返回值。
  • 抽象類不能被實例化,也就是不能用new關鍵字去產生對象。
  • 抽象方法只需聲明,而不需實現。
  • 抽象類的子類必須覆蓋全部的抽象方法後才能被實例化,不然這個子類仍是個抽象類。html

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

    1.被提高爲父類的例子,代碼以下:
public class Role{
    private String name;
    private int level;
    private int blood;
    public int getBlood(){
        return blood;
    }
    public void Setblood(int blood){
        this.blood= blood;
    }
    public int getLevel(){
        return level;
    }
    public void setLevel(int level){
        this.level=level;
    }
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
}

2.在一開始使用繼承時,我試着將書上的代碼合到一塊兒,卻怎麼樣都不對,通過一行一行的檢查我發現我在定義繼承的時候加上了一句話:static Magician magician;致使後面找不到符號magician所有出錯。刪除了這行字以後,程序依舊沒有成功,再次檢查後發現我將Magician magician=new Magician()的Magician和magician之間多加了一個點,致使對象建立失敗,程序出錯。
成功的代碼以下:java

class Role{
    private String name;
    private int level;
    private int blood;
    public int getBlood(){
        return blood;
    }
    public void setBlood(int blood){
        this.blood= blood;
    }
    public int getLevel(){
        return level;
    }
    public void setLevel(int level){
        this.level=level;
    }
    public String getName(){
        return name;
    }
    public void setName(String name){
        this.name=name;
    }
}
class SwordsMan extends Role{
    public void fight(){
        System.out.println("揮劍攻擊");
    }
}
class Magician extends Role{
    public void fight(){
        System.out.println("魔法攻擊");
    }
    public void cure(){
        System.out.println("魔法治療");
    }
}
public class RPG{
    public static void main(String[] args) {
            demoSwordsMan();
            demoMagician();
        }
        static void demoSwordsMan(){
            SwordsMan swordsMan=new SwordsMan();
            swordsMan.setName("Justin");
            swordsMan.setLevel(1);
            swordsMan.setBlood(200);
            System.out.printf("劍士:(%s,%d,%d)%n",swordsMan.getName(),swordsMan.getLevel(),swordsMan.getBlood());
        }
        static void demoMagician(){
            Magician magician=new Magician();
            magician.setName("Monica");
            magician.setLevel(1);
            magician.setBlood(200);
            System.out.printf("魔法師:(%s,%d,%d)%n",magician.getName(),magician.getLevel(),magician.getBlood());
        }
}

而且程序運行成功:
函數

本週代碼託管截圖

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

這一星期的學習出如今書上的有不少都是專業術語,乍看上去有種什麼都不會了的感受,再加上個上星期的Java學習我還有不少不到位的地方,所以看着兩章的時候我感受很吃力,看了幾遍書也沒用徹底弄懂某些地方。我想像之前那樣經過對書上代碼的實踐更好的理解程序,卻發現修改了幾遍本身的程序以後,仍是會有一些書上沒有提到過的錯誤,這些錯誤有的是由於打出來的代碼太長,不當心就犯了一些符號上的或者是多加了一個分號或者是名稱大小寫的錯誤,有的是由於我在憑着本身的理解打出來的時候多加了一些不應加的語句,還有一些是書上沒有提到的錯誤,可是經過查閱資料能夠解決。總而言之,經過幾回這樣的實踐,我感受對這章內容的理解進步了很多。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 200/200 2/2 10/10
第二週 300/500 1/3 16/26
第三週 300/800 1/4 18/44
第四周 300/1100 1/5 18/62

參考資料

相關文章
相關標籤/搜索