第五週總結

學號 2019-2020-1823 《數據結構與面向對象程序設計》第五週學習總結

教材學習內容總結

  • 繼承是java類的一種特徵,能夠在父類的前提下編寫出子類,繼承避免多個類間重複定義共同行爲,使用關鍵字extends。繼承代表了子類與父類之間的is-a關係,中文稱爲「是一種」。子類繼承父類以後,定義與父類中相同的方法部署,但執行內容不一樣,這稱爲「從新定義」 ,即「重寫」(Override)。
  • 在Java中只有單一繼承,即子類只能繼承一個父類
  • 在Java中,若是想取得父類中的方法定義,能夠在調用方法前,加上super關鍵字。能夠使用super調用的父類方法,不能定義爲private(由於這就限定只能在類內使用)。
  • 若是想執行父類中某構造函數,能夠使用super()指定。如:super(10)表示調用父類構造函數時傳入int數值10。
  • 若是class前使用了final關鍵字定義,那麼表示這個類是最後一個了,不會再有子類,也不會被繼承
  • 從新定義方法要注意,對於父類方法中的方法權限,只能擴大不能縮小。若原來成員public,子類從新定義時不可爲private或protected
  • enum可用於定義枚舉常數。
  • java split(「」)能夠用來分割字符串
  • char[] e = s.toCharArray();能夠用來將字符串s所有填入字符數組e[]中,這樣能夠對e進行索引,找出關鍵字符。
  • a = Integer.parseInt(a1[0]);能夠將字符串a1[]轉換成整數型a
  • 在Java中能夠使用interface定義抽象的行爲和外觀。接口中的方法沒有操做時,必定得是公開且抽象。

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

問題1:方法重載 與 方法重寫
問題1解決方法:多態性是面向對象編程的一種特性,和方法無關。靜態多態性是指,一樣的一個方法可以根據輸入數據的不一樣,作出不一樣的處理,即方法的重載(有不一樣的參數列表)。動態多態性是指,當子類繼承父類的相同方法,輸入數據同樣,但要有別於父類的相應時,就要覆蓋父類方法,即在子類中重寫該方法(相同參數,不一樣實現)。html

  • 問題2:容易搞混public、private、protected
  • 問題2解決方法:對修飾符進行總結

總結:java

修飾符:權限修飾符、狀態修飾符、抽象修飾符git

類:編程

權限修飾符:默認修飾符,public數組

狀態修飾符:final數據結構

抽象修飾符:abstrasocket

成員變量:ide

權限修飾福:4種都可函數

狀態修飾符:static,final學習

構造方法:

只有權限修飾符:4種都可

成員方法:
權限修飾符:4種都可

狀態修飾符:static,final

抽象修飾符:abstract

用得較多的是public

目前見到的組合規則:
成員變量:public static final

成員方法:public static、public abstract、public final

  • 問題3:super. 與 this.的使用區別
  • 問題3解決方法:
    this表示當前對象,也就是當前類對象,super表示當前類的父類,如
public changfangxing(int chang,int kuan,int gao)
    {
        this.chang=chang;
        this.gao=gao;
        this.kuan=kuan;
    }

這上面咱們用的就是this,表示的是當前對象裏chang的數據。

public zhengfangxing(int chang, int kuan, int gao) 
 {
        super(chang, kuan, gao);
    }

super用的是當前類的父類。

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

  • 問題1:String[] a1 = s.split("+");爲什麼運行失敗
  • 問題1解決方法:
    由於 "+"是一個正則字符,必需要轉義才能夠使用,因此正確用法應該是這樣的
String[] a1 = s.split("\\*|\\+|-|/");

"*"和 "+"都須要轉義而減除不須要。

  • 問題2:

  • 問題2解決方法:
    這個問題是我沒有覆蓋完接口中的方法,使得程序報錯,只要咱們把接口中的方法覆蓋完或者刪除掉多餘的方法就能夠解決了。

  • 問題3:不知道如何計算字符串

  • 問題3解決方法:
    咱們能夠將字符串分隔開,將其裏面的數轉換成整數,再將字符串放到數組裏,用索引找到運算是加法仍是減法運算。代碼以下:

package com.company;
public class script
{
    private String s ;
    public script(String s)
    {
        this.s=s;
    }
public  String getresult()
{
    String[] a1 = s.split("\\*|\\+|-|/");

    String reply = "";
    int a, b, c, d;
    a = Integer.parseInt(a1[0]);
    b = Integer.parseInt(a1[1]);
    c = Integer.parseInt(a1[2]);
    d = Integer.parseInt(a1[3]);
    Rational rational = new Rational(a,b );
    Rational rational1 = new Rational(c,d);
    int i = 0;
    int n = 0;
    char[] e = s.toCharArray();
    for (i = 0; i < e.length; i++) {
        if (e[i] == '+') {
            reply = rational.add(rational1).toString();
        } else if (e[i] == '-') {
            reply = rational.subtract(rational1).toString();
        } else if (e[i] == '*') {
            reply = rational.multipy(rational1).toString();
        } else if (e[i]=='/')
        {
            n++;
        }
        else if (e[i]=='/'||n==3)
        {
            reply = rational.divide(rational1).toString();
        }
    }
    return  reply;
}

script類是輸入一個字符串給它後,它會將字符串轉換成數字,而後調用rational類來計算有理數,最後再以字符串的形式返回給主函數。

代碼託管

(statistics.sh腳本的運行結果截圖)

上週考試錯題總結

上週並沒有考試。

  • 上週博客互評狀況

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

  • 本週時間緊迫(可能撞上了國慶),在有限的時間內學習了繼承還有javasocket編程,難度頗大,讓我感觸最深的仍是對書本的研讀沒有夠深刻,在實驗中一些方法課本上都有,可是日常讀書時沒有認真去看。
  • 經過代碼學習java有着其獨特的好處,能夠加深咱們的記憶,現將代碼運行一遍,再慢慢解析理解每行代碼的意義,這樣更有利於咱們理解代碼,先從需求的角度再到用編程方法解決的角度來看代碼。

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 200/200 2/2 20/20
第二週 300/500 2/4 18/38
第三週 623/1000 3/7 22/60
第四周 600/1600 2/9 22/82
第三週 1552/2987 2/11 22/94

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

  • 計劃學習時間:10小時

  • 實際學習時間:15小時

  • 改進狀況:

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

參考資料

相關文章
相關標籤/搜索