第4周學習總結

20165226 2017-2018-3 《Java程序設計》第4周學習總結

教材學習內容總結

第五章 子類與父類

  • 類的繼承知識點
    (1)java不支持多重繼承,也就是說子類至多隻能有一個父類
    (2)子類繼承了其父類中不是私有的成員變量和成員方法,做爲本身的成員變量和方法
    (3)子類中定義的成員變量和父類中定義的成員變量相同時,則父類中的成員變量不能被繼承
    (4)子類中定義的成員方法,而且這個成員方法的名字,返回類型,及參數個數和類型與父類的某個成員方法徹底相同,則父類的成員方法不能被繼承。html

  • jvm的執行過程
    (1)子類B 的構造方法被調用,實例化一個B對象,B對象的成員被初始化
    (2)jvm隱含的調用父類的構造方法,實例化一個A對象,A對象的成員被初始化。
    (3)因爲A對象的printI()未被屏蔽,因此調用的A對象的printI()函數。
    那麼,在這裏A的成員函數固然是訪問本身的成員變量了。java

  • super關鍵字
    super關鍵字在java中的做用是使被屏蔽的成員變量或者成員方法或變爲可見,或者說用來引用被屏蔽的成員變量和成員成員方法。super是用在子類中,目的是訪問直接父類中被屏蔽的成員。git

第六章 接口與實現

  • 使用關鍵字interface來定義一個接口
interface Printable {
   final int MAX=100;
   void add();
   float sum(float x,float y);
}
  • 接口表示方法
    • 圓形表示法
    • 構造型表示法

  • 一個類中須要在類聲明中使用關鍵字implements聲明該類實現一個或多個接口。若是實現多個須要用逗號隔開接口名。
  • 實現關係的UML圖

  • abstract類vs接口
    • 均可以有abstract方法。
    • 接口只能有常量,不能有變量;abstract類有既有常量又有變量。
    • abstract類也能夠有非abstract類方法,接口不能夠。
  • 程序設計後以後,首先應當對接口的修改「關閉」。

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

  • 問題1:看到p115時,不由想到java中若是建立一個子類的對象,那麼父類的對象是否被建立了?編程

  • 問題1解決方案:經過查找資料,發現:不會,按理來講,子類繼承父類的話,構造方法父類先執行,那麼這個執行應該只是代碼上的,對象的話應該是沒有建立的。多態其中一條很明顯的道理,父類引用指向子類對象。那麼這個引用的話,應該只是代碼上的引用。jvm

  • 問題2:書上122頁上提到super這個關鍵字,想到上一章提到的this,產生了疑問:superthis有什麼不一樣?
  • 問題2解決方案:其實super.不是「東西」,說道super.天然會想到this.,有人把他們歸爲同類,其實他們大大不一樣
    - this:是一個真真實實對象,表明的就是當前對象,能夠用 return this; 去返回一個對象。
    - super:不能一個對象,不是指向父類對象的意思,super只是修飾了他後邊的內容,告訴JVM,後面這部份內容不是當前對象所屬類的內容而已,若用return super,JVM是不容許的,是一種錯誤的語法。函數

public static void main(String args[]) { Chilren b = new chilren(); Father c = b System.out.println(b.age); System.out.println(c.age); } 輸出 18 40  學習

看到上面這段代碼,這裏並非說內存中有兩個對象 b 和 c ,內存中其實就只有一個 b對象 ,只是c 不只有本身的實例 變量,同時也存在父類所定義的所有實例變量。this

因此能夠得出結論:`在實例化一個子類的同時,系統會給子類全部實例變量分配內存,也會給他的父類的實例變量分配內存,及時父子類中存在重名的實例變量,也會兩個都分配內存的,這個時候子類只是隱藏了父類的這個變量,但仍是會給它分配內存,而後能夠用super來訪問屬於父類的變量。`
  • 問題3:有些不明白,實際上建立的是子類的實例,爲何調用的是子類的方法,父類的成員變量?
  • 問題3解決方案:經過查找資料,獲得如下解釋
這是java多態性的表現,要深刻理解的話得從內存方面去思考,建立的是子類對象,可是指針類型是父類的,它能指向的內存塊是父類應能對應的內容。當你把A類得Area()方法刪除時,a指向的內存塊裏沒有Area方法,或者說它指向的這個對象雖然有這個方法,可是這個指針倒是無法去訪問該方法的, 因此出現沒法訪問的狀況。
  • 問題4:教材121中若是子類以下定義computer方法,是否屬於重寫繼承的computer方法的經過編譯運行,結果是
17.0
20

爲何不屬於重寫computer方法,編譯無錯誤呢?設計

  • 問題4解決方案:子類在重寫能夠繼承的方法時,徹底能夠按照本身的意圖編寫新的方法體,以便體現重寫方法的獨特的行爲。

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

  • 問題1:編譯以後,運行時,系統出現錯誤: 找不到或沒法加載主類 Example5_2

  • 問題1解決方案:從新在src目錄中編譯了一次,再運行
  • 問題2:運行Example5_5.java文件時出現了'17.0 20'的結果

  • 問題2解決方案:將Example5_5.java的子類中程序
float computer (float x,float y,double z) {
   return x-y;
}

改爲指針

float computer (float x,float y) {
   return x*y;
}
  • 問題3:運行書中122例七結果卻以下圖

  • 問題3解決方案:vi瞭如下代碼,發現其中次序有所顛倒,因而將其改爲
float resultOne = aver.f();
float resultTwo = aver.g();

再進行編譯運行,結果正確。

注:當super調用被隱藏的方法時,該方法中出現的成員變量時被子類隱藏的成員變量或繼承的成員變量

  • 問題4:運行書上例13時出現瞭如下情況

  • 問題4解決方案:經過編譯Application.java這個文件,再java Application,結果成功運行

  • 問題5:運行第五章課後習題時出現以下圖所示問題

  • 問題5解決方案:認真校對代碼後發現將println拼寫成了pritnln,更改事後順利運行

    代碼託管

上週考試錯題總結

  • 錯題1:表達式0xaa|0x55的值
    - 緣由:最後的結果仍應換成十六進制
    - 總結:在運算過程當中,應注意進制
  • 錯題2:表達式-2>>>1的值
    • 緣由:沒區分>>>>>
    • 總結:>>>是無符號右移,即不管正負數,右移以後符號位均補0,-2的二進制無符號右移一位以後爲0111 1111 1111 1111 1111 1111 1111 1111,即2^31-1。
  • 錯題3:下列與3*4的值相等的是
    • 緣由:關於運算符的運算前後沒弄清楚
    • 總結:3*4即3左移兩位。^在Java中表示亦或。
  • 錯題4:觀察下列方法的定義,則該方法的返回類型爲 ReturnType method(byte x, double y) {    return (short)x/y*2; }
    - 緣由:在程序中對精度不敏感。
    - 總結:short將byte類型的x強制轉化爲short類型,但y的精度更高,因此返回類型爲double。
  • 錯題5:short和Float都屬於基本數據類型。
    - 緣由:Float是float提供的封裝類,不是基本數據類型。
    - 總結:要看清是大寫仍是小寫。
  • 錯題6:「字符類型」中的「字符」指Unicode表中的一個字符。
    - 緣由:概念不清楚
    - 總結:應多看書,從書中尋找答案。

結對及互評

  • 博客中值得學習的或問題:
    • 要素全面
    • 很認真細緻
    • 排版簡介美觀
  • 代碼中值得學習的或問題:
    • 代碼中文件分類簡潔
    • 很認真

點評過的同窗博客和代碼

  • 本週結對學習狀況
    • 20165230
    • 結對照片

    • 結對學習內容
      • 學習如何使用jdb,在jdb上進行代碼調試

其餘

經過這周的考試,發現本身有不少地方不足,特別是在編程這種實踐型的操做的時候,顯得無從下手,有些無力,其實理論知識和動手操做是兩碼事,平時應該多動手編程,而不只僅只是敲書上的代碼

學習進度條

代碼行數(新增/累積) 博客量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第四周 1105/1300 1/2 30/90

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

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

  • 計劃學習時間:30小時

  • 實際學習時間:18小時

  • 改進狀況:

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

參考資料

相關文章
相關標籤/搜索