1. 程式人生 > >《Java程式設計》第三次學習總結

《Java程式設計》第三次學習總結

學號 《Java程式設計》第三次學習總結

教材學習內容總結

JAVA Fundations : 資料結構。
(1000字以內總結一下本週學習內容,儘量不要抄書)

  • 看完了第五章(即:JAVA程式設計的第八版的第四章和第七章)。
  • 一個類由兩部分組成:資料和方法,即:成員變數(也稱為域變數(Filed Variable)或者 例項變數)和成員方法。要區分好成員變數與區域性變數之間的差異。成員變數的作用域是整個類,而區域性變數是某個方法之中(區域性變數也僅僅只是在某個方法中定義的)。
  • 對於大多數的類而言得去自己去改寫toString()方法。因為預設的情況下,呼叫Syetem.out.println("object");時會預設呼叫toString();方法,列印的是這個物件在記憶體中的一些資訊(我們看不懂,所以意義不太大,只知道它包含了這個物件在記憶體中的資訊)。所以,我們改寫toString();方法後,可以讓Syetem.out.println("object");輸出一些更加有意義的字串,可以讓我們更好的獲得某些相關資訊。
  • 針對基本型別而言。對於類中的那些成員變數(也稱為域變數,例項變數),Java會自動初始化(如果我們沒有初始化,預設情況下,初始化為0,boolean為假),但是,JAVA不會預設初始化區域性變數,因此,最好在宣告資料(即:宣告變數時)初始化它。
  • 封裝性:物件的例項資料只能由物件自己來修改,類A之外的程式碼,是無法去訪問以及修改A類之內的變數。
  • 可以通過物件去呼叫setxxx(); 方法去修改變數,或者通過類名去呼叫方法(針對類方法)。注意:為客戶提供服務的方法,必須宣告為public。
  • 設定器:setxxxx()和訪問器getxxxx()。通過這兩個方法來操作成員變數。對成員變數的操作只能是在方法之中!
  • 呼叫方法時要注意是否是否是在同一個類中?一個JAVA程式是有若干個類組成的。所以才會出現這個呼叫的問題。

  • 構造方法通常用於初始化物件。(這個初始化物件的作用是方便我們去使用物件,類似於:康師傅這個品牌下面的“紅茶”和“綠茶”,在初始化的時候瓶子裡就裝滿了相應的茶,如果不做相應的初始化,就需要我自己拿著瓶子去裝對應的飲料,這就很麻煩了,竟然還我自己去動手裝,我只想拿到瓶子我就能喝到我想要的飲料。)
  • 預設的構造方法裡什麼也沒有,不會對新建立的物件有任何影響。

第七章總結:

  • 軟體開發的步驟:


  • 明確類和物件:首先,先確定問題描述中有哪些物件?物件通常是名詞,找出物件以後再去把這些物件分類,得到需要編寫的”類“有哪些。接下來就是程式設計了。
  • 靜態方法只能使用靜態變數,不能使用成員變數(因為成員變數很有可能還沒有”誕生“,即:被例項化)。反過來,成員方法能夠使用靜態變數。
  • 所有的類共享”靜態變數“。類比於:所有的同學去打水是改變的同一壺水的水量。這個“水壺”就是一個靜態變數。

  • 類間的關係:聚合(也稱:關聯)、依賴
    聚合就是:has a 的關係。如:汽車有底盤。這裡:汽車是一個物件A,底盤是另一個物件B。因此:A has a B。A類物件關聯與B類物件,或者:A類物件組合了B類物件。

  • 依賴就是:is a 的關係。類A是類B中某個方法的引數或者類B的某個方法的返回的資料型別是A類物件。即:B類中有一個方法是:b_Class_Method(A object_a); 或者 A b_Class_Method(); 那麼B依賴於A。(沒有A類就不會有B類呀)

  • this 代表正在執行該方法的那個物件。是一個代詞的意思。注意:類方法中不能使用this,因為this 很有可能還沒有"誕生"
  • “介面”表示一組公共的方法(函式)。類通過實現定義在介面中的每個抽象方法來實現這個介面。注意:在IDEA中實現介面使,除了要有implements 關鍵字之外,還要有:<實現介面的類名> 。說到IDEA,IDEA中可以使用相對路徑,但是起點不是原始碼在的資料夾,起點是:專案的根目錄

    專案的根目錄
  • 一個類可以實現多個介面,但是隻能繼承一個父類。
  • 列舉型別是一種特殊的類,列舉型別的值是物件。所有的列舉值實際上是物件的引用(地址)。在列舉型別的類定義中可以增加屬性和方法。
  • 可以將物件A提供的一個複雜的方法分解為由多個簡單的方法來實現。如下圖:除法被分解為:乘以這個數的倒數。接著去實現:乘法以及求倒數這兩個簡單的方法就行。



  • 方法的引數傳遞:分為兩種情況:①形參是基本型別;②形參是類型別。根據上一篇說的基本型別直接存,類型別存引用可知。對於基本型別來說,形參只是一個副本,在方法中對這個基本型別的形參做的操作並不會改變實參中的值。但是類型別就不一樣了,類型別裡放的是地址(引用),所以傳遞給形參的就是地址,這樣在方法中對形參做的一切操作都會改變實參的值,因為傳給形參的是地址呀!下圖的例子很生動:
  • 書上的官方解釋

  • 方法過載:方法名稱相同,只是形參引數不同:引數個數不同或者形參的型別不同。順序也行,只要這兩個方法的簽名不完全一樣就行。(返回值不屬於簽名的一部分!)
  • 基本定義 簽名:
  • 測試:找BUG,即:發現問題。也就是“舉反例”。

  • 缺陷測試:



  • 黑盒測試:就是黑盒子模型,只看輸入輸出,類似STEP OVER的概念。白盒就是對模型的每個細節都去測試:類似STEP INTO的概念。
  • 對於黑盒測試中的輸入:稱為等價類。

  • 可變引數:同一型別的引數的個數不確定,而且這種可變引數必須放在方法形參列表中的最後一項。如:public void g(double a,int ... x); 後面的 int ... x 就是可變引數。
  • 如果使用了包名,則:儲存目錄下面必須有\tom\jiafei 的結構,用JAVA命令執行這個程式,要到tom的上一層。回想一下:Linux中的目錄,所以上一篇裡說的直接 /bin 就是這裡的上一層目錄。執行時,要寫主類的全名(即:包括包名)如:中國.安徽.合肥

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

    求最大公約數的函式有問題,我修改為:

程式碼除錯中的問題和解決過程

完成了

  • 問題1:編寫PP74時,實現介面有問題。
  • 解決方法:加上<實現介面的類名>就解決了,如上圖。
  • 問題2:編譯時出了問題,用 javac *.java 來編譯。而且是在父資料夾。
  • 問題3:公共類名與檔名不匹配
  • 解決方法:仔細檢查檔名!大小寫!!!O 和 o 還有 P 和 p
  • 看錯誤資訊時,應該直接看“錯誤”兩個字前面的程式名字,那個程式才是有錯誤的程式。

    本週程式碼託管截圖

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

    收穫良多!溫故而知新。知道了toString()的方法。知道了很多其他術語。還有Linux中O和o的大小寫,P和p的大小寫的區別,還有I 和 i的區別。。。

學習進度條

程式碼行數(新增/累積) 部落格量(新增/累積) 學習時間(新增/累積) 重要成長
目標 5000行 30篇 400小時
第一週 68/68 5/5 20/20
第二週 354/422 1/6 18/38

參考資料

  • Java程式設計 第八版
  • Java2實用教程